1998.02.19 03:05 "tifflib bug? Help!!!", by ZhuBin

Hi!Everybody.

I created the *.lib by using the *.mak file I found in the \contrib\Win95 folder. (Windows95 and VC++5.0) And then call the function in tif2dib.c:

        HDIB LoadTIFFinDIB(LPSTR lpFileName)

to display the Tiff file in my application, there are two problems about the use:

Image Samples in v3_4pics_tar.Z

1. Open some tiff files the application will down at

        memcpy(lpBits, &buf[(int) (l*LineSize)]...)
 in function LoadTIFFinDIB(..).

2. When I display the image using the HDIB the function returns, just like this:

   ....
   ASBool DrawTiffImageInRect(CDC* pDC, CString filename,CRect& rt)
{
        int BitsPerSample = 8;
        HDIB hDib=LoadTIFFinDIB((char*)(const char*)filename);  
        if(hDib==0)
                return false;   

        LPBITMAPINFOHEADER  lpDIB=(LPBITMAPINFOHEADER) GlobalLock(hDib);

        HPALETTE            hPal, hOldPal;
        LPLOGPALETTE        pLogPal;
        LPBITMAPINFO        lpBMI;
        int                 nEntries;
        BOOL                bSuccess;

        nEntries = 1<<BitsPerSample;
        pLogPal = (LPLOGPALETTE)new char [sizeof(LOGPALETTE) + sizeof(PALETTEENTRY) * nEntries];
        pLogPal->palVersion = 0x300;
        pLogPal->palNumEntries = nEntries;

        lpBMI = (LPBITMAPINFO)lpDIB;

        for (int i=nEntries-1; i>=0; i--) {
                pLogPal->palPalEntry[i].peRed = lpBMI->bmiColors[i].rgbRed;
                pLogPal->palPalEntry[i].peGreen = lpBMI->bmiColors[i].rgbGreen;
                pLogPal->palPalEntry[i].peBlue = lpBMI->bmiColors[i].rgbBlue;
                pLogPal->palPalEntry[i].peFlags = 0;
        }

        HDC hDC=pDC->m_hDC;
        hPal = CreatePalette(pLogPal);
        hOldPal = SelectPalette(hDC, hPal, TRUE);
        RealizePalette(hDC);
        delete pLogPal;

#if 1   
        bSuccess = StretchDIBits(hDC,
                rt.left,rt.top,
                rt.Width(),rt.Height(), //Dest
                0,0,
                lpDIB->biWidth,lpDIB->biHeight,//Src
                FindDIBBits((LPSTR)lpDIB),
                (LPBITMAPINFO)lpDIB,
                DIB_RGB_COLORS,
                SRCCOPY);
#else
        bSuccess = SetDIBitsToDevice(hDC,            // hDC
                0,         // DestX
                0,        // DestY
                lpDIB->biWidth,       // nDestWidth
                lpDIB->biHeight,    // nDestHeight
                0,         // SrcX
                0,         // SrcY
                0,                // nStartScan
                lpDIB->biHeight,  // nNumScans
                FindDIBBits((LPSTR) lpDIB),   // lpBits
                (LPBITMAPINFO)lpDIB,          // lpBitsInfo
                DIB_RGB_COLORS);              // wUsage
#endif                                                                                                            
        GlobalUnlock(hDib);

        return true;
}

When display in 1:1(Using SetDIBtsToDevice)t, the image dispaly well, but using stretch, there should be some rubbish in the image, what's the reason? Have I created the wrong Palette?

Can you help me?

Thanks for help!

Bin