JPEG や PNG を拡大して描画するには?
JPEG や PNG の拡大、縮小はサポートされていません。
ビットマップの拡大、縮小はサポートされています。
そこで、JPEG や PNG を拡大して描画する場合はビットマップに画像を描画し、ITRANSFORM_TransformBltComplex() や ITRANSFORM_TransformBltSimple() を使用します。
SophiaFramework では、 SFBTransform::TransformBltSimple 関数や SFBTransform::TransformBltComplex 関数を使用して、ビットマップに描画後の PNG イメージを拡大します。
以下のサンプルコードでは、 PNG イメージをリソースファイルから読み込み、 2 倍に拡大して表示します。
[ BREW API のみを使用したコード ]
// リソース ファイルから読み込む PNG イメージのリソース ID
#define IDP_MY_PICTURE 0x0001
IShell* shell = app->a.m_pIShell;
IDisplay* display = app->a.m_pIDisplay;
IImage* pngimg = NULL;
IBitmap* tmpBmp = NULL;
IBitmap* dst = NULL;
ITransform* trans = NULL;
AEEImageInfo info = {0};
// リソース ファイルから PNG イメージを読み込みます。
pngimg = ISHELL_LoadResImage(shell, MYRESOURCE_RES_FILE, IDP_MY_PICTURE);
if (pngimg != NULL) {
// PNG イメージの情報を取得します。
IIMAGE_GetInfo(pngimg, &info);
// 一時保存用のビットマップを作成します。
IDISPLAY_GetDeviceBitmap(display, &dst);
IBITMAP_CreateCompatibleBitmap(dst, &tmpBmp, info.cx, info.cy);
// 描画先のビットマップを設定します。
IDISPLAY_SetDestination(display, tmpBmp);
// 一時保存用のビットマップに描画します。
IIMAGE_Draw(pngimg, 0, 0);
// 描画先のビットマップをデフォルトに戻します。
IDISPLAY_SetDestination(display, NULL);
// ITransform インターフェイスを取得します。
IBITMAP_QueryInterface(dst, AEECLSID_TRANSFORM, &trans);
// 一時保存用のビットマップに描画した画像を、2 倍に拡大してデバイス画面に描画します。
ITRANSFORM_TransformBltSimple(trans, 0, 0, tmpBmp, 0, 0, info.cx, info.cy, TRANSFORM_SCALE_2, COMPOSITE_OPAQUE);
// インターフェイスを破棄します。
ITRANSFORM_Release(trans);
IBITMAP_Release(tmpBmp);
IBITMAP_Release(dst);
IIMAGE_Release(pngimg);
}
// 画面を更新します。
IDISPLAY_Update(display);
[ SophiaFramework を使用したコード ]
// リソース ファイルから読み込む PNG イメージのリソース ID
#define IDP_MY_PICTURE 0x0001
SFBShellSmp shell = SFBShell::GetInstance();
SFBDisplaySmp display = SFBDisplay::GetInstance();
SFBImageSmp pngimg;
SFBBitmapSmp tmpBmp;
SFBBitmapSmp dst;
SFBTransformSmp trans;
AEEImageInfo info = {0};
// リソース ファイルから PNG イメージを読み込みます。
pngimg = shell->LoadResImage(MYRESOURCE_RES_FILE, IDP_MY_PICTURE);
if (pngimg != NULL) {
// PNG イメージの情報を取得します。
pngimg->GetInfo(&info);
// 一時保存用のビットマップを作成します。
display->GetDeviceBitmap(&dst);
dst->CreateCompatibleBitmap(&tmpBmp, info.cx, info.cy);
// 描画先のビットマップを設定します。
display->SetDestination(tmpBmp);
// 一時保存用のビットマップに描画します。
pngimg->Draw(0, 0);
// 描画先のビットマップをデフォルトに戻します。
display->ResetDestination();
// SFBTransform インスタンスを生成します。
trans = SFBTransform::NewInstance(dst);
// 一時保存用のビットマップに描画した画像を、2 倍に拡大してデバイス画面に描画します。
trans->TransformBltSimple(0, 0, tmpBmp, 0, 0, info.cx, info.cy, TRANSFORM_SCALE_2, COMPOSITE_OPAQUE);
}
// 画面を更新します。
display->Update();









