コード例 #1
0
ファイル: cfimage.cpp プロジェクト: hatc/ekc
/*
    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;
}
コード例 #2
0
ファイル: DIBImage.cpp プロジェクト: telnykha/VideoA
//---------------------------------------------------------------------------
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 );
}
コード例 #3
0
ファイル: DIBImage.cpp プロジェクト: telnykha/VideoA
//---------------------------------------------------------------------------
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 );
}