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
April 2007

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!



Thread

2007.04.11 12:49 "DC to tiff", by <sirkukskall@yahoo.no>
2007.04.11 12:49 "DC to tiff", by <sirkukskall@yahoo.no>
2007.04.11 13:05 "Re: DC to tiff", by Chris Losinger
2007.04.11 13:26 "Re: DC to tiff", by Joris Van Damme
2007.04.11 13:29 "Re: DC to tiff", by Joris Van Damme

2007.04.11 12:49 "DC to tiff", by <sirkukskall@yahoo.no>

Anybody know how to print a DC to a tiff file? I can't seem to make it
work..
 
Code:
BITMAPINFOHEADER *pBMh = NULL;
BITMAPINFO *pBM = NULL;
BYTE *bits;
HBITMAP hBmp;
TIFF *tif;
// Allocate bitmap info header 
pBMh =
(BITMAPINFOHEADER*)malloc(sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD));
if(pBMh == NULL){
return 0;
}

memset(pBMh, 0, sizeof(BITMAPINFOHEADER));
pBMh->biSize = sizeof(BITMAPINFOHEADER);
pBMh->biHeight = GetDeviceCaps(dc, VERTRES);
pBMh->biWidth = ((((int)GetDeviceCaps(dc, HORZRES)*8)+31)&~31)>>3;
pBMh->biBitCount = 24;
pBMh->biPlanes = 1;
pBMh->biCompression = BI_RGB;
// Setup color table for mono DIBs
pBM = (BITMAPINFO*)pBMh;
pBM->bmiColors[1].rgbBlue = 255;
pBM->bmiColors[1].rgbGreen = 255;
pBM->bmiColors[1].rgbRed = 255;
hBmp = CreateDIBSection(dc, (BITMAPINFO*)pBMh, DIB_RGB_COLORS,
(void**)&bits, 0, 0);
if(!hBmp || !bits){
free(pBMh);
return(0);
}

// get the image information from the provided DIB
UINT32 height = pBMh->biHeight;
UINT32 width = pBMh->biWidth;
UINT32 bitcount = (UINT32)pBMh->biBitCount;
UINT32 bytecount = bitcount / 8;
free(pBMh);
if((width > 0) && (height > 0)){
// open the output TIFF image for writing
if((tif = TIFFOpen(achFile, "w")) == NULL)
return 0;
}

// set up the image tags

TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, width);

TIFFSetField(tif, TIFFTAG_IMAGELENGTH, height);

TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 8);

TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_PACKBITS);

TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB);

TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 3);

TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, 1);

TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);

TIFFSetField(tif, TIFFTAG_RESOLUTIONUNIT, RESUNIT_NONE);

TIFFSetField(tif, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);

unsigned char * psrc = (unsigned char *)bits;

unsigned char * pdst = new unsigned char[(width * 3)];

UINT32 src_index=0;

UINT32 dst_index=0;

// now go line by line to write out the image data

for(UINT32 row = 0; row < height; row++ ){

// initialize the scan line to zero

memset(pdst,0,(size_t)(width * 3));

// moving the data from the dib to a row structure that

// can be used by the tiff library

for(UINT32 col = 0; col < (UINT32)width; col++){

src_index=(width-row-1)*width*bytecount+col*bytecount;

dst_index = col*3;

pdst[dst_index++]=psrc[src_index+2];

pdst[dst_index++]=psrc[src_index+1];

pdst[dst_index]=psrc[src_index];

}

// now actually write the row data

TIFFWriteScanline(tif, pdst, row, 0);

}

TIFFClose(tif);

return 1;