
Hi, Yesterday I went on a bend to understand memory images, so far I've just taken them for granted. I have a situation where I need to resample photos at print time. If a client uses their 37 gigapixel camera and I print that to pdf it bloats the size of the pdf so as they can't email them. My old hack was with GDI+, code I barely understood. So I've gotten to the code below and for all I know it is not a good start, but it works. With gil I could do more like crop and rotate without modifying the source image. Right now I'm at a loss as to how to attach a bitmap to a gil view. (Over ride the allocator?) In my test I've got two extra memcpy calls I should not have to do. I'd like to use gil directly on the windows bitmap memory. BTW, that one hour flash at Adobe was great. Now I want to 'Gilify' my code. Note HEImage::g_image is a rgb8_image_t; HBITMAP test_gil( HBITMAP hBitmap ) { DIBSECTION d; //testing, assume rgb8_image_t in object int nBytes = ::GetObject( hBitmap, sizeof( DIBSECTION ), &d ); HEImage image( d.dsBm.bmWidth, d.dsBm.bmHeight );//, d.dsBm.bmBits, 0 ); should just be able to attach bits memcpy( &image.g_image._view[ 0 ], d.dsBm.bmBits, d.dsBmih.biSizeImage ); //gil::jpeg_read_image( "C:\\cpp\\HE_9\\jpeg-8c\\GIL_test\\In\\IMG_0006.JPG", image.g_image ); HEImage image2( d.dsBm.bmWidth, d.dsBm.bmHeight ); //testing, just flip image... gil::copy_pixels( gil::rotated180_view( image.g_image._view ), image2.g_image._view ); BITMAPINFO bi24BitInfo; //testing, populate to match rgb8_image_t memset( &bi24BitInfo, 0, sizeof( BITMAPINFO ) ); bi24BitInfo.bmiHeader.biSize = sizeof(bi24BitInfo.bmiHeader); bi24BitInfo.bmiHeader.biBitCount = 24; // rgb 8 bytes for each component(3) bi24BitInfo.bmiHeader.biCompression = BI_RGB;// rgb = 3 components bi24BitInfo.bmiHeader.biPlanes = 1; bi24BitInfo.bmiHeader.biWidth = d.dsBm.bmWidth; bi24BitInfo.bmiHeader.biHeight = d.dsBm.bmHeight; HBITMAP oBitmap = ::CreateDIBSection( NULL, &bi24BitInfo, DIB_RGB_COLORS, 0, 0, 0 ); nBytes = ::GetObject( oBitmap, sizeof( DIBSECTION ), &d ); memcpy( d.dsBm.bmBits, &image2.g_image._view[ 0 ], d.dsBmih.biSizeImage ); return oBitmap; } In test used like: bResamplePhoto= true; //TODO testing.... if( bResamplePhoto ) { for( size_t i= 0; i < photoWnd.size( ); ++i ) { HBITMAP hB= test_gil( photoWnd.at( i ) ); photoWnd.at( i ).Destroy( ); photoWnd.at( i ).Attach( hB ); } }