Changeset 4598 for trunk/src/gdi32/dibitmap.cpp
- Timestamp:
- Nov 15, 2000, 5:10:41 PM (25 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/gdi32/dibitmap.cpp
r4590 r4598 1 /* $Id: dibitmap.cpp,v 1.1 2 2000-11-14 14:28:22sandervl Exp $ */1 /* $Id: dibitmap.cpp,v 1.13 2000-11-15 16:10:40 sandervl Exp $ */ 2 2 3 3 /* … … 314 314 //SvL: Open32's SetDIBits really messes things up for 1 bpp bitmaps, must use SetBitmapBits 315 315 if(pBitmapInfo->bmiHeader.biBitCount == 1 && startscan == 0 && numlines == pBitmapInfo->bmiHeader.biHeight) 316 { 317 int linewidth = DIB_GetDIBWidthBytes(pBitmapInfo->bmiHeader.biWidth, 1); 318 char *newpix = (char *)malloc(linewidth*pBitmapInfo->bmiHeader.biHeight); 316 {//WARNING: hack alert! 317 int dibwidth = DIB_GetDIBWidthBytes(pBitmapInfo->bmiHeader.biWidth, 1); 318 int bmpwidth = BITMAP_GetWidthBytes(pBitmapInfo->bmiHeader.biWidth, 1); 319 char *newpix = (char *)malloc(dibwidth*pBitmapInfo->bmiHeader.biHeight); 319 320 char *orgpix = (char *)pBits; 320 321 int ret; 321 322 322 newpix += ((pBitmapInfo->bmiHeader.biHeight-1)*linewidth); 323 dprintf(("Flipping 1bpp bitmap and calling SetBitmapBits (WORKAROUND) (%d -> %d)", dibwidth, bmpwidth)); 324 newpix += ((pBitmapInfo->bmiHeader.biHeight-1)*bmpwidth); 323 325 324 326 //flip bitmap here; SetDIBits assumes origin is left bottom, SetBitmapBits left top 327 //SetDIBits assumes DWORD aligned data 328 //SetBitmapBits assumes WORD aligned data 325 329 for(int i=0;i<pBitmapInfo->bmiHeader.biHeight;i++) { 326 memcpy(newpix, orgpix, linewidth); 327 newpix -= linewidth; 328 orgpix += linewidth; 330 memcpy(newpix, orgpix, bmpwidth); 331 332 newpix -= bmpwidth; 333 orgpix += dibwidth; 329 334 } 330 newpix += linewidth;335 newpix += bmpwidth; 331 336 ret = O32_SetBitmapBits(hBitmap, pBitmapInfo->bmiHeader.biSizeImage, newpix); 332 337
Note:
See TracChangeset
for help on using the changeset viewer.