TImageのPictureにあるアイコンを拡大して表示したいのですが・・
TImage がフォームの上にあるとして 100x100 で描画するには
procedure TForm1.Button1Click(Sender: TObject);
var
IC:TIcon;
begin
IC := TIcon.Create;
try
IC.Assign(Image1.Picture);
Image1.Picture.Bitmap.Width := 100;
Image1.Picture.Bitmap.Height := 100;
Image1.Canvas.Brush.Color := Color;
Image1.Canvas.FillRect(Rect(0,0,100,100));
DrawIconEx(Image1.Canvas.Handle,0,0,IC.Handle,100,100,0,0,DI_IMAGE or DI_MASK);
finally
IC.Free;
end;
end;
Thank you..
成功しましたが、作成済みのプロジェクトで使用したところ
TPictureをTImageに代入できませんって・・何故だ〜!?
みす
別のTImageを指定していました
すみません
Image1.Canvas.Brush.Color := white;
とした所、このイメージの後には画像があり、このイメージは常時移動しています
背景を透過させたいのですがマスクはできないのでしょうか?
> このイメージの後には画像があり、このイメージは常時移動しています
これはですね、最初の質問が TImage.Picture にアイコンが読み込まれているの
でややこしくなっているんです。はじめから TIcon で読み込ませると例のコード
のようにして DrawIconEx() でマスクを指定して任意の場所に拡大描画できます。
マスクがどこにあってどこにどうすれば良いのやら・・
分からん..
16*16の透過済みアイコンの入ったTImageを、
背景画像の上で48*48に拡大された状態で透過されたまま移動させたいのですが、
移動するアイコンを拡大時に透過されたままにしたいわけです
Image1 に背景画像があるとして、その上で動かすアイコンは PaintBox1 に
描くことにし、移動は PaintBox1 の Left Top を変化させるとします。
新規で以下のようにしてください。Image1 には予め大きめの画像を読み込んで
おきます。ImageList1 をダブルクリックしてアイコンを一つ読み込んでおきます。
PaintBox1 は Image1 の上に置きます。
Button1 を押すと、アイコンの画像がピコピコ移動します。
type
TForm1 = class(TForm)
Image1: TImage;
ImageList1: TImageList;
PaintBox1: TPaintBox;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure PaintBox1Paint(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private 宣言 }
public
Icon:TIcon;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
PaintBox1.Width := 48;
PaintBox1.Height := 48;
Icon := TIcon.Create;
ImageList1.GetIcon(0,Icon);
Randomize;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Icon.Free;
end;
procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
DrawIconEx(PaintBox1.Canvas.Handle,0,0,Icon.Handle,48,48,0,0,DI_NORMAL);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
PaintBox1.Left := Random(300);
PaintBox1.Top := Random(300);
end;
単に、アイコンのImageの、TransparentをTrueにするだけではだめですか?
> にしのさん
> 単に、アイコンのImageの、TransparentをTrueにするだけではだめですか?
アイコンを拡大描画したビットマップの Transparent を True にするのと
アイコン自体がもっているマスクで縁取りした拡大描画は違います。でも、
マスクが右下隅のピクセルを含む場合は同じになりますので、ほとんど
の場合は一緒でしょうね。
間違えました
× 右下隅のピクセルを含む場合
○ 左下隅のピクセルを含む場合
なるほど、忘れてました。
# 試したアイコンは縁が透明だったので
それならば、Imageの高さをアイコンの拡大後の高さより1ピクセル高くしてTransparentを設定するとか。
# 未確認です
その場合にも問題があり、アイコンの中で使用していない色を背景にしないとたぶんだめですね。
>その場合にも問題があり、アイコンの中で使用していない色を背景にしないとたぶんだめですね。
黒一色ですのでそれでも問題ありませんが
jokさんので完璧でした
有り難う御座いました
ツイート | ![]() |