WorkToolSmith

Delphi XE3 FireMonkey変更点

太田アベル

・ 更新 ・ 2分で読めます

当サイトの記事には一部に広告リンクが含まれる場合があります。

Delphi XE3ではFireMonkeyが2となりました。

いろいろな宣言やユニットの変更が行われていますが、問題はヘルプが追いついていないということで・・・

気づいた変更点を書いていきます。

カラー定数の定義ユニットが変わった

「claWhite」などのカラー定数の定義場所が変わっています。

これは「System.UIConsts」に移動しています。定数を使う場合は自分でusesに書かなければなりません。

Canvas.Scanlineが消えた

TBitmapに高速にピクセルを打つための常套手段、Scanlineプラロパティが消えています。しかしヘルプには「Scanlineを使える」と書いてあり、混乱します。

以下XE3ヘルプから引用

TBitmap はピクセル単位(Pixels、ScanLine)で操作やカスタマイズを行うことができます。低レベルでカスタマイズを行うには、カラービット(StartLine)を使用します。

かなり焦りましたが、Delphi MLで細川さんからアドバイスをいただきました。TBitmap.Map関数でデータへの構造体を取得、それに対して処理を行うようです。ちなみにTBitmap.Mapは説明が入っていません。(;–

以下のコードでScanlineと同等の処理が可能です。

var

Bmp: TBitmap;

BmpData: TBitmapData;

yAddr : Integer;

Bmp := TBitmap.Create(300, 300); 

Bmp.Map(TMapAccess.maWrite, BmpData);

for Y := 0 to Bmp.Height - 1 do

begin

  YAddr := Y * Bmp.Height;

  for X := 0 to Bmp.Width - 1 do

    PAlphaColorArray(BmpData.Data)^[YAddr + X] := $80FF0000;

end;

Bmp.Unmap(BmpData);

Bmp.Free;

上記の処理で、半透明赤のビットマップが出来上がります。

ちなみに、TBitmapDataにはSetPixelという座標でピクセルにアクセスできるプロパティがあります。

TBitmapData.Dataと比較してみたところ、Data経由でアクセスしたほうが10倍近く速いです。SetPixelはほんの少しの処理なら便利ですが、画像全体に行う処理では使わないほうがよさそうです。

上記の比較をしたソースコード(exe入り)をアップしておきます。

こちらからダウンロードしてみてください。当然ながらDelphi XE3でしかコンパイルできません。

太田アベル

太田アベル

パソコンを7歳からいじり始めて40年。とにかくパソコンが好きです。気になった商品をほぼ自腹で買いまくってレビュー中!良かった点、悪かった点をズバズバ書きます。

𝕏 でフォロー プロフィールを見る

こちらもおすすめ