Ignore:
Timestamp:
Nov 15, 2000, 5:10:41 PM (25 years ago)
Author:
sandervl
Message:

SetDIBits bugfix (WORD vs DWORD aligned scanlines)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/gdi32/dibitmap.cpp

    r4590 r4598  
    1 /* $Id: dibitmap.cpp,v 1.12 2000-11-14 14:28:22 sandervl Exp $ */
     1/* $Id: dibitmap.cpp,v 1.13 2000-11-15 16:10:40 sandervl Exp $ */
    22
    33/*
     
    314314    //SvL: Open32's SetDIBits really messes things up for 1 bpp bitmaps, must use SetBitmapBits
    315315    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);
    319320        char *orgpix    = (char *)pBits;
    320321        int   ret;
    321322
    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);
    323325
    324326        //flip bitmap here; SetDIBits assumes origin is left bottom, SetBitmapBits left top
     327        //SetDIBits assumes DWORD aligned data
     328        //SetBitmapBits assumes WORD aligned data
    325329        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;
    329334        }
    330         newpix += linewidth;
     335        newpix += bmpwidth;
    331336        ret = O32_SetBitmapBits(hBitmap, pBitmapInfo->bmiHeader.biSizeImage, newpix);
    332337
Note: See TracChangeset for help on using the changeset viewer.