掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
FMXでのTBitMapの使い方 その2 (ID:48543)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
yTakeです。 失礼しました。ちょっと見ない間に、フォローがあった様です。 一応閉めていましたので、”その2”としました。 KONさん、Mr.XRAYさんのアドバイスなどを参考に、意図する事が実現できました。 要点は二つで、FMXでのTBitMapのPixel毎の操作、作成したBitMapのTImageへの描画、です。 ARY[x、y]は8ビット化した濃度マトリックスのデータでこれをグレイスケールで描画します。 先ず、BitmapのPixel操作ですが、"Map"と"UnMap"を使う様です。 bmpData : TBitmapData; 操作をするBitMapエリア pColor : TAlphaColor; 操作するPixelのカラー を定義します。 bmp[i]:= TBitMap.Create(); bmp[i].Width := x_siz; bmp[i].Height:= y_siz; bmp[i].Map( TMapAccess.Write, bmpData ); for j := 0 to y_siz - 1 do begin for i := 0 to x_siz - 1 do begin grey := ARY[ i, j ]; pColor := grey + grey shl 8 + grey shl 16 + $FF000000; vBitMapData.SetPixel( i, j, pColor ); end; end; bmp[i].UnMap( vBitMapData ); Mapはビットマップへのアクセス許可、UnMapはビットマップ変更の確定、bmpDataは許可されたビットマップ、pColorは操作する色(アルファ含む)、TMapAccessはアクセスモード(read/Write/ReadWrite) VCLの時はビットマップのPixelへ直接操作が可能で、Map/UnMapなどの処理は不要でした。 次にTImageへの描画ですが、こちらもVCLから変更があった様です。 VCLの時は、 Image.Canvas.StrechDrawで実現出来ていました。 FMXでは、BeginScene、EndSceneを使う様です。 srcRect : TRectF; 元画像の矩形範囲(実数で4点を指定) dstRect : TRectF; 表示先の矩形範囲(実数で4点を指定) Image.Bitmap.Canvas.BeginScene; 描画開始 Image.Bitmap.Canvas.DrawBitmap(bmp[i],srcRect,dstRect,1);描画のコピー Image.Bitmap.Canvas.EndScene; 描画終了 ただ、Helpのサンプルでは、EndSceneの後、"BitmapChanged"を使っていましたが、同じ様にすると"Bitmap.Changedという名前のメンバを含んでいません"となりました。 実際には、Mr.XRAYさんからのサンプルにもあります様に、"BitmapChanged"を使わなくても問題ない様でした。 なお、前回の問い合わせの最後で、ImageにBitmapが描画されなかった点は、アルファチャンネルカラーの設定($FF000000)と誤:Image.Canvas、正Image.Bitmap.Canvasのアクセス方法に誤りがあった為と思います。 確認と報告が遅れました。 上述、報告させて頂きます。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.