次の所を参考に CBitmap のリサイズ …
How do you scale a CBitmap object?
1 回はリサイズできているが,コピー動作の部分が違っているみたいで正しく表示できない.
検索してみたがあまりわかりやすいコードに引っ掛からなかった.
Copilot で問合わせると
// 元のビットマップ
CBitmap originalBitmap;
// ... (originalBitmap を適切に初期化)
// コピーするビットマップ
CBitmap copiedBitmap;
// 元のビットマップの情報を取得
BITMAP bitmapInfo;
originalBitmap.GetBitmap(&bitmapInfo);
// コピーするビットマップを作成
copiedBitmap.CreateBitmap(bitmapInfo.bmWidth, bitmapInfo.bmHeight, bitmapInfo.bmPlanes, bitmapInfo.bmBitsPixel, NULL);
// 元のビットマップのビットを取得
BYTE* pBits = new BYTE[bitmapInfo.bmWidthBytes * bitmapInfo.bmHeight];
originalBitmap.GetBitmapBits(bitmapInfo.bmWidthBytes * bitmapInfo.bmHeight, pBits);
// コピーするビットマップにビットを設定
copiedBitmap.SetBitmapBits(bitmapInfo.bmWidthBytes * bitmapInfo.bmHeight, pBits);
// メモリを解放
delete [] pBits;
関数として書き直し.
CBitmap* Copy_CBitmap (CBitmap* src)
{
CBitmap* dst = new CBitmap ;
BITMAP bm ;
src->GetBitmap(&bm) ;
dst->CreateBitmap(bm.bmWidth,bm.bmHeight,bm.bmPlanes,bm.bmBitsPixel,NULL) ;
BYTE* pBits = new BYTE[bm.bmWidthBytes*bm.bmHeight] ;
src->GetBitmapBits(bm.bmWidthBytes*bm.bmHeight,pBits) ;
dst->SetBitmapBits(bm.bmWidthBytes*bm.bmHeight,pBits) ;
delete[] pBits ;
return dst ;
}
何とかコピーを表示できた.
https://itl.mish.work/i_Tools/Doc/blog/migrate/T_CB0606.zip
[…] CBitmap のコピー […]