43 #include "allheaders.h" 50 #define BYTESPERLINE(Width, BPP) ((l_int32)((((DWORD)(Width) * (DWORD)(BPP) + 31) >> 5)) << 2) 67 DSImageBitsSize(LPBITMAPINFO pbmi)
69 switch(pbmi->bmiHeader.biCompression)
74 return pbmi->bmiHeader.biSizeImage;
79 return BYTESPERLINE(pbmi->bmiHeader.biWidth, \
80 pbmi->bmiHeader.biBitCount * pbmi->bmiHeader.biPlanes) *
81 pbmi->bmiHeader.biHeight;
101 ImageBitsSize(HBITMAP hBitmap)
105 GetObject(hBitmap,
sizeof(DIBSECTION), &ds);
106 switch( ds.dsBmih.biCompression )
111 return ds.dsBmih.biSizeImage;
116 return BYTESPERLINE(ds.dsBmih.biWidth, \
117 ds.dsBmih.biBitCount * ds.dsBmih.biPlanes) *
132 setColormap(LPBITMAPINFO pbmi,
135 l_int32 i, nColors, rval, gval, bval;
138 for (i = 0; i < nColors; i++) {
140 pbmi->bmiColors[i].rgbRed = rval;
141 pbmi->bmiColors[i].rgbGreen = gval;
142 pbmi->bmiColors[i].rgbBlue = bval;
143 pbmi->bmiColors[i].rgbReserved = 0;
145 pbmi->bmiHeader.biClrUsed = nColors;
168 DSCreateBitmapInfo(l_int32 width,
177 nInfoSize =
sizeof(BITMAPINFOHEADER);
179 nInfoSize +=
sizeof(RGBQUAD) * (1 << depth);
180 if((depth == 16) || (depth == 32))
181 nInfoSize += (3 *
sizeof(DWORD));
185 pbmi = (LPBITMAPINFO)malloc(nInfoSize);
189 ZeroMemory(pbmi, nInfoSize);
190 pbmi->bmiHeader.biSize =
sizeof(BITMAPINFOHEADER);
191 pbmi->bmiHeader.biWidth = width;
192 pbmi->bmiHeader.biHeight = height;
193 pbmi->bmiHeader.biPlanes = 1;
194 pbmi->bmiHeader.biBitCount = depth;
197 pbmi->bmiHeader.biCompression = BI_RGB;
200 pbmi->bmiHeader.biSizeImage = DSImageBitsSize(pbmi);
202 pbmi->bmiHeader.biXPelsPerMeter = 0;
203 pbmi->bmiHeader.biYPelsPerMeter = 0;
204 pbmi->bmiHeader.biClrUsed = 0;
205 pbmi->bmiHeader.biClrImportant = 0;
216 pMasks = (LPDWORD)(pbmi->bmiColors);
217 pMasks[0] = 0x00007c00;
218 pMasks[1] = 0x000003e0;
219 pMasks[2] = 0x0000001f;
220 pbmi->bmiHeader.biCompression = BI_BITFIELDS;
225 pMasks = (LPDWORD)(pbmi->bmiColors);
229 pMasks[0] = 0xff000000;
230 pMasks[1] = 0x00ff0000;
231 pMasks[2] = 0x0000ff00;
233 pbmi->bmiHeader.biCompression = BI_BITFIELDS;
238 setColormap(pbmi, cmap);
263 DSCreateDIBSection(l_int32 width,
274 pbmi = DSCreateBitmapInfo (width, height, depth, cmap);
278 hRefDC = GetDC(NULL);
279 hBitmap = CreateDIBSection(hRefDC, pbmi, DIB_RGB_COLORS,
280 (
void **) &pBits, NULL, 0);
281 nInfoSize = GetLastError();
282 ReleaseDC(NULL, hRefDC);
303 pixGetWindowsHBITMAP(
PIX *pix)
305 l_int32 width, height, depth;
307 HBITMAP hBitmap = NULL;
313 PROCNAME(
"pixGetWindowsHBITMAP");
315 return (HBITMAP)ERROR_PTR(
"pix not defined", procName, NULL);
318 cmap = pixGetColormap(pix);
320 if (depth == 24) depth = 32;
324 return (HBITMAP)ERROR_PTR(
"unable to convert pix from 2bpp to 8bpp",
326 depth = pixGetDepth(pixt);
327 cmap = pixGetColormap(pixt);
335 hBitmap = DSCreateDIBSection(width, height, depth, cmap);
337 return (HBITMAP)ERROR_PTR(
"Unable to create HBITMAP", procName, NULL);
354 GetObject (hBitmap,
sizeof(BITMAP), &bm);
355 imageBitsSize = ImageBitsSize(hBitmap);
358 memcpy (bm.bmBits, data, imageBitsSize);
360 DeleteObject (hBitmap);
PIX * pixInvert(PIX *pixd, PIX *pixs)
pixInvert()
l_uint32 * pixGetData(PIX *pix)
pixGetData()
PIXCMAP * pixcmapCreateLinear(l_int32 d, l_int32 nlevels)
pixcmapCreateLinear()
PIX * pixFlipTB(PIX *pixd, PIX *pixs)
pixFlipTB()
l_ok pixcmapGetColor(PIXCMAP *cmap, l_int32 index, l_int32 *prval, l_int32 *pgval, l_int32 *pbval)
pixcmapGetColor()
l_ok pixEndianByteSwap(PIX *pixs)
pixEndianByteSwap()
void pixDestroy(PIX **ppix)
pixDestroy()
l_ok pixGetDimensions(const PIX *pix, l_int32 *pw, l_int32 *ph, l_int32 *pd)
pixGetDimensions()
PIX * pixConvert2To8(PIX *pixs, l_uint8 val0, l_uint8 val1, l_uint8 val2, l_uint8 val3, l_int32 cmapflag)
pixConvert2To8()
l_int32 pixcmapGetCount(const PIXCMAP *cmap)
pixcmapGetCount()