1

基本的に Imaging API を使用して、Imaging 組み込みの Resize 関数を使用して再スケーリング関数を作成しています。

サイズ変更された関数を持つ Image* ポインターで構築されたカスタム UBitmap クラスをフィードする必要があるため、Rescale 関数 proto を次に示します。

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 に答える