AWARE [SYSTEMS] Imaging expertise for the Delphi developer
AWare Systems, Imaging expertise for the Delphi developer, Home TIFF and LibTiff Mailing List Archive

LibTiff Mailing List

TIFF and LibTiff Mailing List Archive
February 1998

Previous Thread
Next Thread

Previous by Thread
Next by Thread

Previous by Date
Next by Date

Contact

The TIFF Mailing List Homepage
This list is run by Frank Warmerdam
Archive maintained by AWare Systems



Valid HTML 4.01!



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