现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

GDI+与IStream显示图片

2014-02-07 06:35 工业·编程 ⁄ 共 1184字 ⁄ 字号 暂无评论

    将图片以流的方式显示到控件当中,代码如下:

void DrawPic(HDC hDC, LPCTSTR lpFileName) 

    // 
    // 将图片通过流方式显示在DC中 
    // 
 
    HANDLE hFile = CreateFile(      //打开文件 
        lpFileName, 
        GENERIC_READ, 
        FILE_SHARE_READ, 
        NULL, 
        OPEN_EXISTING, 
        FILE_ATTRIBUTE_NORMAL, 
        NULL); 
    DWORD dwFileSize = GetFileSize(hFile, NULL);        //得到文件的大小 
    DWORD dwReadSize = 0;       //读取的字节数 
    HGLOBAL hImageMemory = GlobalAlloc(GMEM_MOVEABLE, dwFileSize);      //分配堆 
    void* pImageMemory = GlobalLock(hImageMemory);  //锁定堆,并且得到堆指针 
    /*
     * 如果直接传入的是二进制内容,则通过memcpy_s将内容拷贝到pImageMemory当中即可
     * 比如memcpy_s(pImageMemory, dwBuffSize, pBuff, dwBuffSize);
     */ 
    ReadFile(       //读取文件 
        hFile, 
        pImageMemory, 
        dwFileSize, 
        &dwReadSize, 
        NULL); 
    GlobalUnlock(hImageMemory);     //解除锁定 
 
    IStream* pIStream = NULL; 
    CreateStreamOnHGlobal(hImageMemory, FALSE, &pIStream);  //得到IStream 
    Image img(pIStream);        //将流加载到Image对象当中 
    Graphics g(hDC); 
    g.DrawImage(&img, 0, 0, 100, 100);      //绘制图片 
 
    GlobalFree(hImageMemory);       //释放堆空间 
    pIStream->Release();     //释放IStream 

以上方法可以显示jpg、gif、png等格式的图片,如果不需要显示png的图片,可以参考API OleLoadPicture.

相关阅读

----用API OleLoadPicture通过IStream来加载JPG、GIF格式的图片

给我留言

留言无头像?