1

我正在使用 Imaging API 基本上使用 Imaging 内置的 Resize 函数编写重新缩放函数。

我需要提供一个自定义 UBitmap 类,它是用一个 Image* 指针和 resized 函数构建的,所以这里是 Rescale 函数原型:

int Rescale(const UBitmap* src, UBitmap* dst, UINT w, UINT h)

我的函数为 dst 指针分配堆(调用者只需要释放它)。

到目前为止我所做的:

// Get the IImage ptr from the source

HRESULT hr;
CoInitializeEx(NULL, COINIT_MULTITHREADED);

IImage* img_in = src->GetIImage();

if (img_in)
{
    IImagingFactory* pImgf = NULL;
    hr = CoCreateInstance(CLSID_ImagingFactory, 0, CLSCTX_ALL,
            IID_IImagingFactory, void**)&pImgf);

    assert(SUCCEEDED(hr));
        IBitmapImage* pIResBmp = NULL;
        hr = pImgf->CreateBitmapFromImage(img_in,w,h, PixelFormatDontCare, 
                 InterpolationHintBilinear, &pIResBmp);
    assert(SUCCEEDED(hr));

    IImage* pImgOut = NULL;  // How to obtain IImage pointer from pIResBmp?

    bmpOut = new UBitmap(dst);
    pImgf->Release();
}   

CoUninitialize();

所以我已经成功地使用 pImg->CreateBitmapFromImage 调用重新缩放了图像,但我不知道如何获取 IImage* 来提供 UBitmap 构造函数。

提前致谢。

4

1 回答 1

0

要获得 IImage* 对象,只需使用 IImagingFactory::CreateImageFromFile。请参阅http://msdn.microsoft.com/en-us/library/aa918650.aspx

于 2009-11-17T12:55:10.170 回答