ホーム > デベロッパ > BREW FAQ

BREW FAQ : ビットマップを拡大して描画するには?

ビットマップを拡大して描画するには?

ビットマップを拡大して描画するには、 ITransform インターフェイスの ITRANSFORM_TransformBltSimple 関数、 もしくは、ITRANSFORM_TransformBltComplex 関数を使用します。

単純な拡大表示を行うのであれば、ITRANSFORM_TransformBltSimple 関数を使用します。

SophiaFramework では、 SFBTransform::TransformBltSimple 関数や SFBTransform::TransformBltComplex 関数を使用します。

【 コード例 】

[ BREW API のみを使用したコード ]

//
//  ビットマップを拡大して描画します。
//

// リソース ファイルから読み込むビットマップ画像のリソース ID
#define IDB_MY_PICTURE  0x0001

IShell*         shell       = app->a.m_pIShell;
IDisplay*       display     = app->a.m_pIDisplay;
IBitmap*        dev;
IBitmap*        tmp;
IBitmap*        bmp;
ITransform*     transform;

// 画面を緑色でクリアします。
IDISPLAY_SetColor(display, CLR_USER_BACKGROUND, MAKE_RGB(0xCC, 0xFF, 0xCC));
IDISPLAY_ClearScreen(display);

// デバイスのビットマップを取得します。
IDISPLAY_GetDeviceBitmap(display, &dev);

// デバイスビットマップと互換性のある作業用ビットマップを作成します。
IBITMAP_CreateCompatibleBitmap(dev, &tmp, 100, 100);

// リソース ファイルからビットマップを取得します。
bmp = ISHELL_LoadResBitmap(shell, MYRESOURCE_RES_FILE, IDB_MY_PICTURE);
if (bmp != NULL) {

    // 作業用ビットマップにビットマップを描画します。
    IBITMAP_BltIn(tmp, 0, 0, 100, 100, bmp, 0, 0, AEE_RO_COPY);

    // デバイスビットマップから ITransform インターフェイスを取得します。
    IBITMAP_QueryInterface(dev, AEECLSID_TRANSFORM, &transform);

    // 作業用ビットマップからデバイスビットマップへ変形転送します。
    ITRANSFORM_TransformBltSimple(transform,          // オブジェクト
                                  0,                  // 転送先の X 座標
                                  0,                  // 転送先の Y 座標
                                  tmp,                // 転送元のビットマップ
                                  0,                  // 転送元の転送開始 X 座標
                                  0,                  // 転送元の転送開始 Y 座標
                                  100,                // 転送元の幅
                                  100,                // 転送元の高さ
                                  TRANSFORM_SCALE_2,  // 変形方法
                                  COMPOSITE_OPAQUE);  // 転送モード

    // ITransform インターフェイスを破棄します。
    ITRANSFORM_Release(transform);

    // ビットマップを破棄します。
    IBITMAP_Release(bmp);
}

// 画面を更新します。
IDISPLAY_Update(display);

// 作業用ビットマップを破棄します。
IBITMAP_Release(tmp);

// デバイスビットマップを破棄します。
IBITMAP_Release(dev);

[ SophiaFramework を使用したコード ]

//
//  ビットマップを拡大して描画します。
//

// リソース ファイルから読み込むビットマップ画像のリソース ID
#define IDB_MY_PICTURE  0x0001

SFBShellSmp      shell = SFBShell::GetInstance();
SFBDisplaySmp    display = SFBDisplay::GetInstance();
SFBBitmapSmp     dev;
SFBBitmapSmp     tmp;
SFBBitmapSmp     bmp;
SFBTransformSmp  transform;

// 画面を緑色でクリアします。
display->SetColor(CLR_USER_BACKGROUND, SFXRGBColor(0xCC, 0xFF, 0xCC, 0x00));
display->ClearScreen();

// デバイスのビットマップを取得します。
dev = display->GetDeviceBitmap();

// デバイスビットマップと互換性のある作業用ビットマップを作成します。
tmp = dev->CreateCompatibleBitmap(SFXSize(100, 100));

// リソース ファイルからビットマップを取得します。
bmp = shell->LoadResBitmap(MYRESOURCE_RES_FILE, IDB_MY_PICTURE);

if (bmp != NULL) {

    // 作業用ビットマップにビットマップを描画します。
    tmp->BltIn(SFXRectangle(0, 0, 100, 100), bmp, SFXGrid(0, 0));

    // デバイスビットマップから SFBTransform インターフェイスを取得します。
    transform = SFBTransform::NewInstance(dev);

    // 作業用ビットマップからデバイスビットマップへ変形転送します。
    transform->TransformBltSimple(SFXGrid(0, 0),                 // 転送先の座標
                                  tmp,                           // 転送元のビットマップ
                                  SFXRectangle(0, 0, 100, 100),  // 転送元の矩形
                                  TRANSFORM_SCALE_2);            // 変形方法
}

// 画面を更新します。
display->Update();