Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   von TPaintbox in TImage kopieren (https://www.delphipraxis.net/91171-von-tpaintbox-timage-kopieren.html)

Tannendiess 30. Apr 2007 17:37


von TPaintbox in TImage kopieren
 
Hallo,

ich möchte ein Bild von einer TPaintbox in ein TImage kopieren.

Habe dafür folgenden Code geschrieben, der auch funktioniert:
Delphi-Quellcode:
bild2: TImage;
bild: TPaintBox;

...

for y:=1 to bild.height do for x:=1 to bild.width do bild2.Canvas.Pixels[x,y]:=bild.Canvas.Pixels[x,y];
Aber geht das nicht auch irgendwie über "Assign" oder so? Habe das leider nicht hinbekommen...

Danke schonmal!

DGL-luke 30. Apr 2007 17:52

Re: von TPaintbox in TImage kopieren
 
Hallo,
am besten geht das per Delphi-Referenz durchsuchenCanvas.CopyRect.

Klaus01 30. Apr 2007 17:57

Re: von TPaintbox in TImage kopieren
 
Wie Lukas schon schrieb:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  r: TRect;
begin
  Image1.Width:=PaintBox1.Width;
  Image1.Height:=PaintBox1.Height;
  r:=rect(0,0,Image1.Width,Image1.Height);
  Image1.Picture.Bitmap.Canvas.CopyRect(r,PaintBox1.Canvas,r);
end;
Grüße
Klaus

Tannendiess 30. Apr 2007 18:20

Re: von TPaintbox in TImage kopieren
 
Leider klappt das nicht.

Die Paintbox und das Image liegen direkt übereinander in derselben Form. Nach dem Kopieren ist das Image einfarbig grau - so wie der Formhintergrund.

bitsetter 30. Apr 2007 19:15

Re: von TPaintbox in TImage kopieren
 
Hi,

funktioniert es so?
Delphi-Quellcode:
var
  r: TRect;
begin
  image1.Picture.Bitmap.Width:= Image1.Width;
  image1.Picture.Bitmap.Height:= Image1.Height;

  Image1.Width:=PaintBox1.Width;
  Image1.Height:=PaintBox1.Height;
  r:=rect(0,0,Image1.Width,Image1.Height);
  Image1.Picture.Bitmap.Canvas.CopyRect(r,PaintBox1.Canvas,r);
Eventuell war die Breite und Höhe des Bitmaps = 0.

Tannendiess 30. Apr 2007 19:37

Re: von TPaintbox in TImage kopieren
 
Hilft leider auch nicht. Beide, Image und Paintbox, sind ohnehin align = alClient.

Apollonius 30. Apr 2007 19:54

Re: von TPaintbox in TImage kopieren
 
Also ein einfaches image.canvas.assign(paintbox.canvas) funktioniert bei mir nicht, es kommt ein Fehler, einem ControlCanvas könne kein ControlCanvas zugewiesen werden, was meiner Meinung ziemlicher Schwachsinn ist. Du kannst ja mal mit dem Ansatz herumprobieren, allerdings fürchte ich, dass deine ursprünglich vorgesehene Lösung die einzige ist, die funktioniert, da sonst immer der Hintergrund mitkopiert wird.

inherited 30. Apr 2007 20:05

Re: von TPaintbox in TImage kopieren
 
probier mal Image1.Picture.Bitmap.Canvas.Assign

Apollonius 30. Apr 2007 20:09

Re: von TPaintbox in TImage kopieren
 
Tut mir leid, aber bei mir spuckt er wieder eine Fehlermeldung, ähnlich der oben bereits beschriebenen, aber sinnvoller, in etwa "Zuweisung von ControlCanvas an BitmapCanvas".

DGL-luke 1. Mai 2007 14:38

Re: von TPaintbox in TImage kopieren
 
Hallo,

sowohl TPaintBox als auch TImage werden beide nur auf das Form-Canvas draufgepackt und sind keine echten WinControls. Deswegen sind Device-Contexts praktisch "write-only", du kannst sie nicht sicher auslesen, vor allem nicht, wenn sie übereinander liegen.

Deshalb solltest du mit Hier im Forum suchenOffScreen-Bitmaps arbeiten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:40 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