Imageで反転してしまう

解決


茶色  2007-06-01 02:05:20  No: 26432

ImageとButtonをFormに貼り付けて、Buttonのイベントに以下のコードを記入し実行すると、Image部分が白く反転してしまいます。

procedure TForm1.Button1Click(Sender: TObject);
begin
  Image1.Height := 105;
  Image1.Width := 105;
  Image1.Transparent := True;

  Image1.Canvas.Pen.Color := clBlue;
  Image1.Canvas.MoveTo(0, 0);
  Image1.Canvas.LineTo(0, 105);
end;

但し
  Image1.Canvas.LineTo(0, 104);

  Image1.Canvas.LineTo(1, 105);
とすると、正常にラインが描画されます。

これはTImageコンポーネントの不具合又は仕様なのでしょうか?

使用OS
  Winsows2000(SP4)
開発環境(両方で調査)
  Trubo Delphi(Update2)
  Delphi7 Pro


にしの  2007-06-01 04:42:07  No: 26433

Image1.Canvas.MoveTo(0, 0);
Image1.Canvas.LineTo(0, 105);
Image1.Canvas.MoveTo(0, 0);
Image1.Canvas.LineTo(100, 100);
とやるとわかると思いますが、左下が透明色として扱われているため、青の線が見えなくなっているだけだと思います。


茶色  2007-06-01 05:19:17  No: 26434

>にしのさん
回答ありがとう御座います。

記憶が曖昧ですが、確かTransparentModeだかに関わる所でしたよね、左下を透明色として扱うと言う仕様は?

只、Image部分が白く反転してしまうのは何故でしょうか?
今、複数のImageを重ねて、レイヤーの様に使用しているので、透明になって欲しいんです。

TransparentModeだかをFalseとかにする必要があるのでしょうか?


にしの  2007-06-01 07:12:18  No: 26435

左下が透明色に指定されるので、
> 但し
> Image1.Canvas.LineTo(0, 104);
> や
> Image1.Canvas.LineTo(1, 105);
この場合には白が透明になります。

> Image1.Canvas.LineTo(0, 105);
この場合は、左下は青なので、青が透明(=白は表示される)になります。


茶色  2007-06-01 17:43:01  No: 26436

透明色の指定と言うのはどのタイミングで変わるのでしょうか?

左下の色が変わる毎に変わってしまう物なのでしょうか?


にしの  2007-06-01 19:33:56  No: 26437

> 透明色の指定と言うのはどのタイミングで変わるのでしょうか?
> 左下の色が変わる毎に変わってしまう物なのでしょうか?
TBitmapクラスのTransparentModeプロパティがtmAutoの場合は、左下の色で判断されます。左下の色が変われば、その色が透明色です。
tmFixedであれば、TransparentColorプロパティで指定された色が透明色となります。

TImageクラスには、Transparentプロパティはあっても、TransparentMode, TransparentColorはありません。
一度、TBitmapのオブジェクトを作ってからTImageのPictureプロパティに入れた方がよいと思います。
TBitmapオブジェクトを用意しないのであれば、Image1のPictureプロパティのBitmapプロパティが生成されていることを前提に、

  Image1.Picture.Bitmap.PixelFormat := pf24bit;
  Image1.Picture.Bitmap.TransparentColor := RGB(255,255,255);
  Image1.Picture := Image1.Picture;

とでもしてやれば、白が透明色になります。


茶色  2007-06-01 20:34:21  No: 26438

以下コードをButtonのイベントに貼り付けて実行し、背景が白色反転する事はなくなったのですが、今度はラインが表示されません。
透明色は白で、ラインは青なのに?

  Image1.Picture.Bitmap.PixelFormat := pf24bit;
  Image1.Picture.Bitmap.TransparentColor := RGB(255,255,255);
  Image1.Picture := Image1.Picture;
  Image1.Canvas.Pen.Color := clBlue;
  Image1.Canvas.MoveTo(0, 0);
  Image1.Canvas.LineTo(0, 105);


茶色  2007-06-01 20:45:02  No: 26439

Image1.Canvas.Brush.Colorを、
Image1.Picture.Bitmap.TransparentColorと別の色に設定する事で上手く行きそうです。

にしのさん、有難う御座いました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加