Hvad er der vejen i denne funktion?
Jeg har lavet en funktion, som skriver noget tekst pået i bitmap og laver en fil ud fra det.
Men af een eller årsag er billedet fyldt med tilfældige pixels omkring teksten.
Er der nogen, der kan løse problemet?
Koden:
#include \"stdafx.h\"
#include<windows.h>
#include \"stdlib.h\"
void DrawText (PSTR pStr, long width)
{
HDC hdcMem, hdc;
BITMAPINFOHEADER bi;
HBITMAP bm;
HGDIOBJ stkBm;
TEXTMETRIC tm;
int bredde;
FILE *fil;
LOGFONT lf;
LPSIZE pSize = new SIZE;
int cnty = 0; // tæller linjer
unsigned char *tmp_mem;
memset(&bi, 0, sizeof(BITMAPINFOHEADER));
bi.biSize = sizeof(BITMAPINFOHEADER);
bi.biWidth = width;
bi.biHeight = 35;
bi.biCompression = BI_RGB;
bi.biPlanes = 1;
bi.biBitCount = 24;
bi.biSizeImage = bi.biWidth * bi.biHeight * 3;
bi.biXPelsPerMeter = bi.biYPelsPerMeter = 0;
bi.biClrUsed = bi.biClrImportant = 0;
hdc = GetDC(NULL);
hdcMem = CreateCompatibleDC(hdc);
bm = CreateCompatibleBitmap(hdc, (WORD)bi.biWidth, (WORD)bi.biHeight);
stkBm = SelectObject(hdcMem, bm);
long allocsize = bi.biWidth * bi.biHeight * 3;
tmp_mem = (unsigned char*)malloc (allocsize);
memset (tmp_mem, 0, allocsize);
memset(&lf, 0, sizeof(lf));
lf.lfHeight = 34;
strcpy(lf.lfFaceName, \"SquareSerif\");
HFONT hFont = CreateFontIndirect(&lf);
SelectObject(hdcMem, hFont);
SetTextColor(hdcMem, RGB(209, 209, 209));
SetBkColor(hdcMem, RGB(0, 0, 0));
GetTextMetrics(hdcMem, &tm);
// Skaf bredden af tekststrengen i pixels
GetTextExtentPoint32(hdcMem, pStr, strlen (pStr), pSize);
bredde = pSize->cx;
delete (pSize);
bredde = bredde + 10;
fil = fopen (\"bredde.txt\", \"w\");
fprintf (fil, \"bredde: %d\\n\", bredde);
fclose (fil);
// skriv tekst
TextOut(hdcMem, 55, 0, pStr, lstrlen(pStr));
GetDIBits (hdcMem, bm, 0, bi.biHeight, tmp_mem, (LPBITMAPINFO)&bi, DIB_RGB_COLORS);
fclose (fil);
DeleteObject(bm);
DeleteDC(hdcMem);
ReleaseDC(NULL, hdc);
// vi prøver lige at lave et screenshot
BITMAPFILEHEADER header;
header.bfType = 19778;
header.bfSize = sizeof (BITMAPFILEHEADER) + bi.biSizeImage + bi.biSize;
header.bfReserved1 = 0;
header.bfReserved2 = 0;
header.bfOffBits = sizeof (BITMAPFILEHEADER) + bi.biSize;
fil = fopen (\"tmp_mem.bmp\", \"w\");
fwrite (&header, sizeof (BITMAPFILEHEADER), 1, fil);
fwrite (&bi, bi.biSize, 1, fil);
fwrite (tmp_mem, bi.biSizeImage, 1, fil);
fclose (fil);
free (tmp_mem);
}
int main(int argc, char* argv[])
{
DrawText (\"Tester funktionen\", 720);
return 0;
}
