Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Prinzipielle Frage zu TImage (https://www.delphipraxis.net/156977-prinzipielle-frage-zu-timage.html)

iphi 22. Dez 2010 20:09

Delphi-Version: 6

Prinzipielle Frage zu TImage
 
Ich habe ein Verständnisproblem:

Ein TImage-Objekt besitzt einen .Canvas, aber auch eine .Picture.Bitmap.Canvas .

Auf beide kann ich zeichnen. Wo liegt der Unterschied?

Und noch eine Frage:
TImage.Transparent funktioniert nur, wenn mein Rechner auf 16 bit Farbtiefe läuft. Mit 32 Bit Farbtiefe geht das nicht. Warum? Was kann man dagegen tun?

Bummi 22. Dez 2010 21:07

AW: Prinzipielle Frage zu TImage
 
deldie erste Frage ist schnell beantwortet wenn Du Dir den Getter für das Canvas von TImage anschaust
Delphi-Quellcode:
function TImage.GetCanvas: TCanvas;
var
  Bitmap: TBitmap;
begin
  if Picture.Graphic = nil then
  begin
    Bitmap := TBitmap.Create;
    try
      Bitmap.Width := Width;
      Bitmap.Height := Height;
      Picture.Graphic := Bitmap;
    finally
      Bitmap.Free;
    end;
  end;
  if Picture.Graphic is TBitmap then
    Result := TBitmap(Picture.Graphic).Canvas
  else
    raise EInvalidOperation.Create(SImageCanvasNeedsBitmap);
end;

Die Zweite Frage verstehe ich nicht ganz, alles mit der Farbe der linken unteren Ecke wird bei Bitmaps auf Wunsch transparent dargestellt.

iphi 22. Dez 2010 21:43

AW: Prinzipielle Frage zu TImage
 
Ok, meine beiden Canvasses sind also ein und dasselbe Objekt.

Zitat:

Die Zweite Frage verstehe ich nicht ganz, alles mit der Farbe der linken unteren Ecke wird bei Bitmaps auf Wunsch transparent dargestellt.
In der Theorie. Aber:

Wenn ich in einem TImage einen neuen Bitmap zur Laufzeit erstelle und nichts draufmale, dann erscheint der komplett weiß. Wenn ich TImage.transparent auf true setze, dann verschwindet er komplett (d.h. wird transparent), allerdings nur bei 16 Bit eingestellter Farbtiefe. Bei 32 Bit Farbtiefe hat bei mir TImage.transparent keinerei Wirkung!???

Bummi 22. Dez 2010 22:38

AW: Prinzipielle Frage zu TImage
 
Ok, so habe ich es noch nie gebraucht, ich arbeite sonst mit GDI+ in Graphiccontrols, aber so gehts
Delphi-Quellcode:
procedure TForm1.Image1Click(Sender: TObject);
begin
   image1.Canvas.Brush.Color := clWhite;
   image1.Canvas.FillRect(Rect(0,0,Image1.Width ,Image1.Height ));
   image1.Transparent := true;
   image1.Canvas.pen.Color := clRed;
   image1.Canvas.Brush.Color := clLime;
   image1.Canvas.ellipse(10,10,100,100);
end;

iphi 23. Dez 2010 07:50

AW: Prinzipielle Frage zu TImage
 
Danke, so gehts.
Warum klappt das ohne das Befüllen mit clWhite nicht?


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz