イメージを塗りつぶすには?

解決


太郎衛門  2004-02-26 07:19:30  No: 7368  IP: [192.*.*.*]

久しぶりに質問をさせていただきます。
イメージを黒く塗りつぶそうと思い、Brushプロパティを使ったところ、
どういう訳か真っ白く表示されてしまいました。
BitbltでBRACKNESSにしないと真っ黒表示にはできないんでしょうか?

  Image1.Canvas.Brush.Style := bsSolid;
  Image1.Canvas.Brush.Color :=  clBlack;

とした後に、OnPaintでBitbltしたのですが、だめでした。

編集    削除
Mr.XRAY  URL  2004-02-26 08:15:19  No: 7369  IP: [192.*.*.*]

いろいろやり方はあるでしょうけど,例えば

procedure TForm1.Button1Click(Sender: TObject);
begin
     Image1.Canvas.Brush.Style := bsSolid;
     Image1.Canvas.Brush.Color :=  clBlack;
     Image1.Canvas.FillRect(Image1.ClientRect);
end;

な感じではないでしょうか.

編集    削除
jok  2004-02-26 08:28:19  No: 7370  IP: [192.*.*.*]

TImage は画像を保持しますから Mr.XRAY さんのコードのように
ただ描くだけで、再描画します。BitBlt() は全く関係ありません。

編集    削除
太郎衛門  2004-02-26 21:39:13  No: 7371  IP: [192.*.*.*]

なるほど。Mr.XRAYさん、jokさん回答ありがとうございます。
>TImage は画像を保持しますから 
もしTImageではなくTbitmapだった場合にはBitbltしないといけないのでしょうか?

編集    削除
jok  2004-02-26 22:17:38  No: 7372  IP: [192.*.*.*]

> もしTImageではなくTbitmapだった場合にはBitbltしないといけないのでしょうか?

そうですね。TBitmap は画像そのものですから、表示するためにはどこかの
Canvas に描画する必要があります。普通は  BitBlt() のような API を使うの
ではなく、TCanvas の Draw() StretchDraw() CopyRect() などのメソッドを
使って描画します。

編集    削除
太郎衛門  2004-02-27 08:30:40  No: 7373  IP: [192.*.*.*]

無事解決しました。
CopyRectで短径領域をコピーして描画すればたいていのことはできそうですね。
ありがとうございました。

編集    削除