|
DelphiXE3 [FMX] 画像(Image)2013/12/26 |
前回は [Shapes]内の「パス図形」(Path)について見てみました。
今回は、同じく[Shapes]内の「画像」(Image)について見てみます。
[Shapes]内
FMX | |
ヘルプより。
TImage は 2 次元の画像コンポーネントを定義したものです。TControl を継承しており、コントロールを作成するためのスタイルで使用できます。
Bitmap プロパティを使って、この TImage コンポーネントに表示する画像を指定します。サポートされている画像の形式のリストは FMX.Types.TBitmapCodecManager を見るとわかります。
WrapMode プロパティを使用して、TImage 描画面をレンダリングするためのビットマップ画像のサイズ変更、複製、位置合わせを行うかどうか、あるいはその方法を指定します。
BitmapMargins が 1 つでも定義されている場合には WrapMode は無視されることに注意してください。 |
| |
|
Bitmap
この TImage コンポーネントによって表示される、ビットマップ画像を示します。
Bitmap プロパティを この TImage コンポーネントによって表示させたい bitmap picture に設定します。 Bitmap を読み込むと TBitmap イメージを取得することができ、それを、他の TImage コンポーネントに割り当てたり、ストリームやファイルに保存することができます。 |
BitmapMargins
この bitmap のマージンを示します。
BitmapMargins プロパティを設定や取得することにより、この TImage コンポーネントによって表示されるイメージのマージンを操作することができます。 |
DisableInterpolation
この TImage コンポーネントによって表示されるbitmapイメージの、補間を有効化または無効化します。
DisableInterpolation プロパティは、この TImage コンポーネントによって表示されるbitmapイメージをレンダリングする際、補間が使用されるかどうかを示します。デフォルトでは、DisableInterpolation は False に設定されています。 |
WrapMode
TImage の表面をレンダリングするため、ビットマップ イメージのサイズ変更、レプリケート、配置を行うかどうか、もしくはその方法を示します。
WrapMode プロパティは、TImageWrapMode 型で定義される低位数の 1 つでなければなりません:
iwOriginal -- 元の大きさでイメージを表示します。
iwFit -- TImage 四角形に(イメージの形、幅と高さの割合を維持しつつ)できるだけ合わせるデフォルトです。
iwStretch -- この TImage コンポーネントの四角形全体を埋めるよう、イメージを拡大します。
iwTile -- TImage コンポーネントの四角形全体を覆うように、TImage イメージをタイル状に並べます。 |
|
というわけで、画像コンポーネントです。
利用出来る画像形式は、ヘルプによると、下記のようになるとの事です。
すべてのプラットフォームでサポートされている画像形式は以下のとおりです。
JPEG(.jpeg、.jpg)
TIFF(.tiff、.tif)
GIF
PNG
BMP
Windows での Direct2D に関係する追加形式は以下のとおりです。
JPEG XR(.hdp、.jxr、.wdp)
ICO
Windows での GDI+ に関係する追加形式は以下のとおりです。
WMF
ICO
OS X での追加形式は以下のとおりです。
JPEG 2000(.jp2)
PSD
TGA
ICNS |
まずは、画像コンポーネントの大きさを150×150ドットにして、100×100ドットの絵を開いてみます。
ボタン Button1 のクリックイベントハンドラを下記のようにします。内容はいい加減ですけれども。
procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Bitmap.LoadFromFile('C:\AFsoft\DelphiXE3\test\AFmark.bmp');
Image1.Bitmap.SaveToFile('aa.jpg');
end; |
保存・コンパイル・実行します。
↓
ボタンをクリックすると、BMP画像を開いて、実行プログラムと同じフォルダに JPEG画像で保存されます。まぁ、カレントフォルダが同じフォルダであるとは限らないですけれども。画像ソフトで確認すると、100×100ドットのJPEGファイルである事が分かります。
画像コンポーネントの大きさを150×150にしたからといって、それは表示だけの話で、保存される画像ファイルの大きさが150×150になる訳ではありません。
上記は、WrapMode プロパティがデフォルトの「iwFit」の場合です。各状態を確認しておきます。
WrapMode = iwOriginal | |
WrapMode = iwFit
(デフォルト) | |
WrapMode = iwCenter | |
WrapMode = iwStretch | |
WrapMode = iwTile | |
次に、BitmapMargins プロパティの各値に「10」を入れて、実行し、ボタンをクリックしてみます。
WrapMode プロパティが「iwTile」のままでした。あれ? ヘルプには
BitmapMargins が 1 つでも定義されている場合には WrapMode は無視されることに注意してください。 |
とありますが、「iwTile」の場合は対象外という事でしょうか? 確かに、他のモードの場合には、
という風にストレッチ状態になっていますけれども。しかし画像が少し綺麗ではないですね。歪んでしまっている感じです。BitmapMargins.Top プロパティだけを「50」にして、他の値を「0」にしてみます。
画像の上(Top)の部分が、詰まったように変形されています。想像していた「マージン」っていう感じではないですが、BitmapMargins プロパティは、このような表示方法が出来るという事のようです。
勿論、保存されるJPEG画像は元のままとなっています。あくまでも表示のみです。オブジェクトインスペクタで Bitmap プロパティにBMP画像を指定しておき、ボタンのクリックイベントハンドラを下記のようにしたとしても同様に元の状態のままです。
procedure TForm1.Button1Click(Sender: TObject);
var
bm : TBitmap ;
begin
bm := TBitmap.Create(150, 150);
bm.Canvas.BeginScene ;
bm.Canvas.DrawBitmap(Image1.Bitmap,RectF(0,0,150,150),RectF(0,0,150,150),1.0) ;
bm.Canvas.EndScene ;
bm.SaveToFile('aa.jpg');
bm.Free ;
end; |
ただし、下記のようにスクリーンショットをとれば保存は出来るようです。
procedure TForm1.Button1Click(Sender: TObject);
var
bm : TBitmap ;
begin
bm := Image1.MakeScreenshot ;
bm.SaveToFile('aa.jpg');
bm.Free ;
end; |
但し、RotationAngle、Scale、Opacity等のようなプロパティ変化の結果は、これでは保存出来ません。別途、Image2を用意して、Image1 を Image2 の子にして、Image2 のスクリーンショットをとるようにすれば出来るようですけれども若干手間かもしれません。が、Image2 に別の画像を読み込んでおけば簡単に画像の重ね合わせ合成が出来ますので、それはそれで面白いかもしれません。
子、といえば、FireMonkey では、コンポーネントの親子関係が簡単に出来ますが、例えば、ボタンに画像をつけたい、という場合は、ボタンコンポーネントの子として、画像コンポーネントを配置し、画像ファイルを指定するだけで可能になります。
画像のコンポーネントとしては、[Standard]内のイメージコントロール、[Additional]内のイメージビューワーコントロール、がありますが、こちらの画像コントロールの方が若干軽そうな感じはします。
|
|
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
>Delphi入門編
>Delphi2010
>DelphiXE3
▲2013/12/25
2013/12/26
▼2013/12/27
シェアウェア
Script!World
データベース
|