我创建了一个Image对象,采用了一个png文件作为参数,现在我需要得到它的HBITMAP,可是Image没有提供相应的函数,我该怎么做。Image的派生类Bitmap中倒是提供了这个功能,我怎样能把Image对象转化为Bitmap对像。由于某些原因,我无法在读文件的时候就直接使用Bitmap

解决方案 »

  1.   

    先轉成BMP再取得HBITMAP
    Image image(L"E:\\temp.png");CLSID clsid;
    GetEncoderClsid(L"image/bmp", &clsid);image.Save(L"E:\\temp.bmp", &clsid, NULL);
    Bitmap bmp(L"E:\\temp.bmp");
    HBITMAP hBmp;Color cr;
    bmp.GetHBITMAP(&cr , hBmp);...int GetEncoderClsid(const WCHAR *format, CLSID *pClsid)
    {
    UINT  num = 0;          // number of image encoders
    UINT  size = 0;         // size of the image encoder array in bytes

    ImageCodecInfo* pImageCodecInfo = NULL;

    GetImageEncodersSize(&num, &size);
    if(size == 0)
    return -1;  // Failure

    pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
    if(pImageCodecInfo == NULL)
    return -1;  // Failure

    GetImageEncoders(num, size, pImageCodecInfo);

    for(UINT j = 0; j < num; ++j)
    {
    if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 )
    {
    *pClsid = pImageCodecInfo[j].Clsid;
    free(pImageCodecInfo);
    return j;  // Success
    }    
    }

    free(pImageCodecInfo);
    return -1;  // Failure

    }時間問題,未經測試