Exemple #1
0
/*
     Функция:
        CFSaveToDIB
     Цель:
         Сохраняет изображение в формате DIB
     Параметры:
       [ in ] hImage  - дескриптор изображения
       [ out ] info   - указатель на заголовок DIB
       [ out ] DIBPixels - указатель на пиксели изображения
     Возвращаемые заначения:
     CF_SUCCESS - данные изображения успешно записаны в память.
     в противном случае возвращает код ошибки.
     Замечания:
     Функция всегда записывает любое изображение hImage в формате
     DIB, который имеет глубину цвета 3 байта
*/
CF_ERROR __EXPORT_TYPE CFSaveToDIB( CF_IMAGE hImage, CF_BMP* info, BYTE* DIBPixels )
{
    CF_ERROR status = CF_SUCCESS;
     if(info == NULL)
    {
        status = CFF_INVALID_DIB;
        return status;
    }

	TLFImage* image = (TLFImage*)hImage;
    if(image == NULL)
    {
        status = CFF_INVALID_HANDLE;
		return status;
    }
    BITMAPINFO lInfo;
    memcpy( &lInfo, info, sizeof( BITMAPINFO ) );
    bool flag = DIBPixels == NULL? false : true;
    if(awpImageToDIB( image->GetImage(), &lInfo, (void**)(&DIBPixels), flag )!=AWP_OK)
	{
        status = CFF_INVALID_DIB;
        return status;
    }
    memcpy( info, &lInfo, sizeof( BITMAPINFO ) );  
    return status;
}
Exemple #2
0
//---------------------------------------------------------------------------
void __fastcall TDIBImage::LoadFromFile(const AnsiString Filename)
{
    awpImage *image = NULL;

    if ( awpLoadImage(Filename.c_str(), &image) != AWP_OK )
        return;

    unsigned char *pDIB = (unsigned char *)::GlobalLock( (HGLOBAL)m_DIBPixels );
    awpImageToDIB( image, &m_DIBInfo, &(void *)pDIB, true );
    awpReleaseImage(&image);
    ::GlobalUnlock( (HGLOBAL)m_DIBPixels );
}
Exemple #3
0
//---------------------------------------------------------------------------
void __fastcall TDIBImage::SetAWPImage( const awpImage* pImage )
{
    if ( pImage == NULL )
        return;

    // Convert awpImage data to DIB format
    unsigned char *pPixels = NULL;
    BITMAPINFO bInfo;
    if ( awpImageToDIB( pImage, &bInfo, &((void*)pPixels), false ) != AWP_OK )
        return;

    Clear();

    // Allocate global memory for converted pixels
    long w      = ((pImage->sSizeX * 24 + 31)/32) * 4;
    long size   = w * pImage->sSizeY * sizeof(unsigned char);
    m_DIBPixels = (HDIB) ::GlobalAlloc( GMEM_FIXED | GMEM_ZEROINIT, size );
    if ( m_DIBPixels == 0 )
    {
        Clear();
        free( pPixels );
        return;
    }

    // Copy converted pixels into global memory block
    unsigned char *pDIB = (unsigned char *) ::GlobalLock( (HGLOBAL)m_DIBPixels );
    if ( pDIB == NULL )
    {
        Clear();
        free( pPixels );
        return;
    }
    memcpy( pDIB, pPixels, size );
    ::GlobalUnlock( (HGLOBAL)m_DIBPixels );

    m_DIBInfo = bInfo;
    free( pPixels );
}
Exemple #4
0
//---------------------------------------------------------------------------
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 );
}