通过GDI+显示图片数据

// 支持的图片类型:bmp、jpeg、png、gif
int ShowImage(HWND hDlg, WORD wControlId, PBYTE pbImageData, INT iDataLen)
{
    HWND hDlgItem = GetDlgItem(hDlg, wControlId);
    if ( hDlgItem != NULL )
    {
        IStream* pIStream = NULL;
        CreateStreamOnHGlobal(NULL, TRUE, &pIStream);
        if ( pIStream != NULL && pbImageData != NULL && iDataLen > 0 )
        {
            pIStream->Write(pbImageData, iDataLen, NULL);
            LARGE_INTEGER liTemp = {0};
            pIStream->Seek(liTemp, STREAM_SEEK_SET, NULL);

            Bitmap cBitmap(pIStream);
            if ( Ok == cBitmap.GetLastStatus() )
            {
                Graphics g(hDlgItem);
                if ( Ok == g.GetLastStatus() )
                {
                    CRect cRect;
                    GetClientRect(hDlgItem, &cRect);
                    Rect r(cRect.left, cRect.top, cRect.Width(), cRect.Height());

                    if ( Ok == g.DrawImage(&cBitmap, r) )
                    {
                        return 0;
                    }
                }
            }
        }
    }

    return -1;
}

int ShowRgbImage(HWND hDlg, WORD wControlId, PBYTE pbBgr, int iWidth, int iHeight)
{
    HWND hDlgItem = GetDlgItem(hDlg, wControlId);
    if ( hDlgItem != NULL )
    {
        HDC hDC = GetDC(hDlgItem);
        if ( hDC != NULL )
        {
            Graphics g(hDC);
            if ( Ok == g.GetLastStatus() )
            {
                CRect cRect;
                GetClientRect(hDlgItem, &cRect);
                Rect r(cRect.left, cRect.top, cRect.Width(), cRect.Height());

                Bitmap cBmp(iWidth, iHeight, iWidth*3, PixelFormat24bppRGB, pbBgr);

                if ( Ok == g.DrawImage(&cBmp, r) )
                {
                    return 0;
                }
            }

            ReleaseDC(hDlgItem, hDC);
        }
    }

    return -1;
}

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值