Столкнулся со следующей проблемой: Есть некий текст, из этого текста нужно получить:
а) файл bmp с этим текстом;
б) нечто пригодное для дальнейшего вывода на экран (скажем HBITMAP).
Несколько непонятно взаимодействие хэндла HBITMAP и контекста девайса HDC. Каким образом сделать так, чтобы текст, напечатанный с помощью контекста ( TextOut(hdc...) ), был в дальнейшем сохранен в битмапе?
Здравствуйте, Henry Twilight, Вы писали:
HT>Несколько непонятно взаимодействие хэндла HBITMAP и контекста девайса HDC. Каким образом сделать так, чтобы текст, напечатанный с помощью контекста ( TextOut(hdc...) ), был в дальнейшем сохранен в битмапе?
См. примеры по CreateCompatibleDC.
Здравствуйте, Gleb Alexeev, Вы писали:
GA>Здравствуйте, Henry Twilight, Вы писали:
HT>>Несколько непонятно взаимодействие хэндла HBITMAP и контекста девайса HDC.
Надеюсь, что буду прав, если скажу что их взаимодействие никаму не должно быть известно ибо оно сокрыто в дебрях кишок мастдая. Снаружи только HBITMAP, который вы можете выбрать на HDC и с него WinAPI'ями получить раааазличную инфу (например DIB) и/или на ём че-нить нарисовать..
HT>>Каким образом сделать так, чтобы текст, напечатанный с помощью контекста ( TextOut(hdc...) ), был в дальнейшем сохранен в битмапе? GA>См. примеры по CreateCompatibleDC.
По-моему проще использовать GetDIBits, ибо после получения DIB'а достаточно будеть только сформировать BITMAPFILEHEADER и приспокойненько записать всё в бинарный файл.
PS: если в примерах CreateCompatibleDC это и делается, то приношу свои извинения.
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
Здравствуйте, Henry Twilight, Вы писали:
HT>Каким образом сделать так, чтобы текст, напечатанный с помощью контекста ( TextOut(hdc...) ), был в дальнейшем сохранен в битмапе?
Здравствуйте, Henry Twilight, Вы писали:
HT>Столкнулся со следующей проблемой: Есть некий текст, из этого текста нужно получить: HT> а) файл bmp с этим текстом; HT> б) нечто пригодное для дальнейшего вывода на экран (скажем HBITMAP).
HT>Несколько непонятно взаимодействие хэндла HBITMAP и контекста девайса HDC. Каким образом сделать так, чтобы текст, напечатанный с помощью контекста ( TextOut(hdc...) ), был в дальнейшем сохранен в битмапе?
Пример из одной моей проги, не обращай внимание на некоторые переменные и возвращаемые ошибки
//создание битмепа
// Выровнять на границу DWORD
UINT Width=Rect.bitmap.right-Rect.bitmap.left;
Width*=3;
if(Width%4)
Width+=4-(Width%4);
// Создать буфер
BYTE *buf=new BYTE [(Rect.bitmap.bottom-Rect.bitmap.top)*Width];
ZeroMemory(buf,(Rect.bitmap.bottom-Rect.bitmap.top)*Width);
// Retrieve the color table (RGBQUAD array) and the bits
// (array of palette indices) from the DIB.
if (!GetDIBits(hDC, hBMP, 0, (WORD) pbih->biHeight, lpBits, pbi,
DIB_RGB_COLORS))
{
return;
}
// Compute the offset to the array of color indices.
hdr.bfOffBits = (DWORD) sizeof(BITMAPFILEHEADER) + pbih->biSize + pbih->biClrUsed
* sizeof (RGBQUAD);
// Copy the BITMAPFILEHEADER into the .BMP file.
if (!WriteFile(hf, (LPVOID) &hdr, sizeof(BITMAPFILEHEADER),
(LPDWORD) &dwTmp, NULL))
{
return;
}
// Copy the BITMAPINFOHEADER and RGBQUAD array into the file.
if (!WriteFile(hf, (LPVOID) pbih, sizeof(BITMAPINFOHEADER)
+ pbih->biClrUsed * sizeof (RGBQUAD),
(LPDWORD) &dwTmp, ( NULL)))
return;
// Copy the array of color indices into the .BMP file.
dwTotal = cb = pbih->biSizeImage;
hp = lpBits;
if (!WriteFile(hf, (LPSTR) hp, (int) cb, (LPDWORD) &dwTmp,NULL))
return;
// Close the .BMP file.
if (!CloseHandle(hf))
return;
ZAM>По-моему проще использовать GetDIBits, ибо после получения DIB'а достаточно будеть только сформировать BITMAPFILEHEADER и приспокойненько записать всё в бинарный файл.
Но сначала нужно нарисовать, что делается путем CreateCompatibleDC/CreateCompatibleBitmap/SelectObject(dc, bitmap).
ZAM>PS: если в примерах CreateCompatibleDC это и делается, то приношу свои извинения.
Принимается