/* CFLoadFromDIB loads image from Windows DIB */ CF_ERROR __EXPORT_TYPE CFLoadFromDIB( CF_IMAGE hImage, CF_BMP info, BYTE* DIBPixels ) { CF_ERROR status = CF_SUCCESS; TLFImage* image = (TLFImage*)hImage; if(image == NULL) { status = CFF_INVALID_HANDLE; return status; } awpImage* img = NULL; BITMAPINFO lInfo; memcpy( &lInfo, &info, sizeof(CF_BMP) ); if( awpDIBToImage(&lInfo, DIBPixels, &img)!= AWP_OK ) { status = CFF_INVALID_DIB; return status; } try { image->SetImage( img ); } catch (...) { status = CFCR_NOT_ENOUGH_MEMORY; awpReleaseImage(&img); return status; } awpReleaseImage(&img); return status; }
//--------------------------------------------------------------------------- void __fastcall TDIBImage::GetAWPImage( awpImage **in_Image ) { if ( m_DIBPixels == 0 ) return; awpImage *image = NULL; *in_Image = NULL; unsigned char *pDIB = (unsigned char *)::GlobalLock( (HGLOBAL)m_DIBPixels ); if ( awpDIBToImage( &m_DIBInfo, pDIB, &image ) == AWP_OK ) *in_Image = image; ::GlobalUnlock( (HGLOBAL)m_DIBPixels ); }
//--------------------------------------------------------------------------- void __fastcall TDIBImage::SetWidth( int in_Width ) { if (in_Width == m_DIBInfo.bmiHeader.biWidth) return; if ( in_Width <= 0 ) { Clear(); return; } if ( in_Width == Width ) return; awpImage *src_image = NULL; awpImage *dst_image = NULL; unsigned char *pDIB = NULL; long size = 0; long w = 0; if ( m_DIBPixels == 0 ) { if ( awpCreateImage( &dst_image, in_Width, 1, 3, AWP_BYTE ) != AWP_OK ) return; } else { pDIB = (unsigned char *) ::GlobalLock( (HGLOBAL)m_DIBPixels ); if (awpDIBToImage( &m_DIBInfo, pDIB, &src_image ) != AWP_OK ) return; ::GlobalUnlock( (HGLOBAL)m_DIBPixels ); if ( in_Width > src_image->sSizeX ) { awpColor white_color; white_color.bRed = 255; white_color.bGreen = 255; white_color.bBlue = 255; awpPoint pnt; pnt.X = 0; pnt.Y = 0; awpCreateImage( &dst_image, in_Width, src_image->sSizeY, src_image->bChannels, src_image->dwType ); //awpFill( dst_image, &white_color ); awpFill( dst_image, 255 ); awpPasteRect( src_image, dst_image, pnt ); } else { awpRect rect; rect.top = 0; rect.bottom = src_image->sSizeY - 1; rect.left = 0; rect.right = in_Width; awpCopyRect( src_image, &dst_image, &rect ); } } Clear(); w = ((dst_image->sSizeX * 24 + 31)/32) * 4; size = w * dst_image->sSizeY * sizeof(unsigned char); m_DIBPixels = (HDIB) ::GlobalAlloc( GMEM_FIXED | GMEM_ZEROINIT, size ); if ( m_DIBPixels == 0 ) { awpReleaseImage( &src_image ); awpReleaseImage( &dst_image ); return; } pDIB = (unsigned char *) ::GlobalLock( (HGLOBAL)m_DIBPixels ); awpImageToDIB( dst_image, &m_DIBInfo, &((void*)pDIB), true); ::GlobalUnlock( (HGLOBAL)m_DIBPixels ); awpReleaseImage( &src_image ); awpReleaseImage( &dst_image ); }