Handle Bitmaptodib (Bitmap * Pbitmap)
{
Word bibits;
BitmapInfoheader Bi;
BitmapInfoHeader Far * lpbi;
DWORD DWLEN;
Handle HDIB;
Handle H;
HDC HDC;
HPALETTE HPAL;
IF (! pbitmap)
Return NULL;
Pixelformat Format = Pbitmap-> getpixelformat ();
Switch (Format) {
Case pixelformat1bppindexed:
BIBITS = 1;
Break;
Case pixelformat4bppindexed:
BIBITS = 4;
Break;
Case pixelformat8bppindexed:
BIBITS = 8;
Break;
Case pixelformat24bpprgb:
BIBITS = 24;
Break;
Case pixelformat32bpprgb:
BIBITS = 32;
Break;
}
bi.bisize = sizeof (bitmapinfohead);
Bi.biwidth = pbitmap-> getWidth ();
Bi.biheight = pbitmap-> getHeight ();
Bi.Biplanes = 1;
Bi.BIBITCOUNT = BIBITS;
BI.BICOMPRESSION = 0;
Bi.bisizeImage = 0;
bi.bixpelspermeter = 0;
Bi.biypelspermeter = 0;
Bi.bi.biRused = 0;
Bi.Biclrimportant = 0;
// Get Palette Size
Uint size = pbitmap-> getpalettesize ();
ColorPalette * Palette = (colorpalette *) malloc (size);
Pbitmap-> getPalette (Palette, size);
// Get Data Size
Bitmapdata BMD;
Pbitmap-> Lockbits (New RECT (0, 0, Pbitmap-> getWidth (), Pbitmap-> getHeight ()),
ImagelockModeRead, Format, & BMD);
Bi.bisizeImage = bmd.height * bmd.stride;
DWLEN = bi.bisize paste-> count * sizeof (rgbquad) bi.bisizeImage
HDIB = GlobalAlloc (GHND, DWLEN);
LPBI = (BitmapInfoHeader Far *) GlobalLock (HDIB);
* lpbi = bi;
Memcpy (lpbi, & bi, bi.bisize);
Rgbquad * ppal = (rgbquad *) ((Byte *) lpbi bi.bisize);
// ppal = (logpaalette *) Localalloc (LPTR, SIZEOF (LogPalette) Palette-> Count * Sizeof (Paletteentry); if (size> 0)
{
// ppal-> PalNumentries = PALETTE-> COUNT;
// ppal-> paalversion = parth;
For (int i = 0; i
PPAL [i] .rgbred = getRvalue (Palette-> Entries [i]);
PPAL [i] .rgbgreen = getGvalue (Palette-> Entries [i]);
PPAL [i] .RGBBBLUE = getBValue (Palette-> Entries [i]);
PPAL [i] .rgbreserved = (byte) 0;
}
// hpal = creagette (ppal);
// localfree ((handle) ppal;
}
// pbyte pdata = (pbyte) (PPAL PALETTE-> Count * sizeof (rgbquad));
PBYTE PDATA = (Pbyte) LPBI BI.Bisize Palette-> Count * SizeOf (RGBQUAD);
PBYTE PSRC = (pbyte) bmd.scan0;
For (int R = bmd.height - 2; r> = 0; r -)
{
Memcpy (PDATA, PSRC R * BMD.Stride, BMD.stride);
PDATA = bmd.stride;
}
// Memcpy (pdata, bmd.scan0, bmd.height * bmd.stride);
Bi = * lpbi;
GlobalUnlock (HDIB);
Pbitmap-> UNLOCKBITS (& BMD);
Return HDIB;
}