Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   BitBld und Anzeige in Image (https://www.delphipraxis.net/159757-bitbld-und-anzeige-image.html)

nezumi7 11. Apr 2011 19:10

BitBld und Anzeige in Image
 
Nabend allerseits,

ich versuche bei einem Bitmap (bmp1) die Kanten abzuschneiten und das Ergebnis (bmp2) in einem TImage anzuzeigen.

So gehts:
Code:
procedure TForm1.Button5Click(Sender: TObject);
var
breite, hoehe: integer;
begin
breite := bmp1.Width-5;
hoehe := bmp1.Height-7;
BitBlt(image2.Canvas.Handle,0,0,breite,hoehe,bmp1.Canvas.Handle,0,0,SRCCOPY);
end;
so aber nicht:
Code:
procedure TForm1.Button5Click(Sender: TObject);
var
breite, hoehe: integer;
begin
breite := bmp1.Width-5;
hoehe := bmp1.Height-7;
BitBlt(bmp2.Canvas.Handle,0,0,breite,hoehe,bmp1.Canvas.Handle,0,0,SRCCOPY);
Image2.Picture.Bitmap := bmp2;
end;
In Image2 erscheint schlicht gar nix. Ich hätte aber gerne diese Variante. Was mache ich falsch?

Gruß, Stephan.

patti 11. Apr 2011 19:12

AW: BitBld und Anzeige in Image
 
Man zeichnet nicht direkt auf die Canvas einer TImage-Komponente! Wenn doch, dann muss die Komponente wohl "gerefreshed" werden. Nimm aber lieber eine PaintBox zur Ausgabe der Grafik.

mfg

Edit: Das mit dem Refresh bzw. Neuzeichnen sollte auch bei deiner zweiten Variante helfen...

Edit2: Willkommen übrigens in der Delphi-Praxis ;)

nezumi7 11. Apr 2011 19:26

AW: BitBld und Anzeige in Image
 
Hi Patti,

Zitat:

Zitat von patti (Beitrag 1094497)
Man zeichnet nicht direkt auf die Canvas einer TImage-Komponente!

ja, auch deshalb will ich ja die zweite Variante. Ich glaube der Fehler liegt eher bei der Zeile BitBlt...

Das mit dem Refresh hab ich nich verstanden. So gehts jedenfalls auch nicht:
Code:
BitBlt(bmp2.Canvas.Handle,0,0,breite,hoehe,bmp1.Canvas.Handle,0,0,SRCCOPY);
Image2.Picture.Bitmap := bmp2;
Image2.Refresh;
grübel, grübel...

rollstuhlfahrer 11. Apr 2011 19:42

AW: BitBld und Anzeige in Image
 
Zitat:

Zitat von nezumi7 (Beitrag 1094499)
Code:
BitBlt(bmp2.Canvas.Handle,0,0,breite,hoehe,bmp1.Canvas.Handle,0,0,SRCCOPY);
Image2.Picture.Bitmap := bmp2;
Image2.Refresh;

Da ist noch ein klitzekleiner Fehler drin. Das muss heißen: Image2.Picture.Graphic.Assign().

Bernhard

nezumi7 11. Apr 2011 19:56

AW: BitBld und Anzeige in Image
 
Hi Bernhard,
Code:
BitBlt(bmp2.Canvas.Handle,0,0,breite,hoehe,bmp1.Canvas.Handle,0,0,SRCCOPY);
Image2.Picture.Graphic.Assign(bmp2);
geht auch nicht, da kommt dann eine Fehlermeldung (EAccessViolation ...)

rollstuhlfahrer 11. Apr 2011 20:04

AW: BitBld und Anzeige in Image
 
Klingt sehr komisch. Hast du dein Bitmap auch richtig erstellt?

Bernhard

nezumi7 11. Apr 2011 20:09

AW: BitBld und Anzeige in Image
 
Hi Bernhard,

ich bin mir nicht ganz sicher, was man da alles machen muss, aber als globale Variable:

Code:
var
  Form1: TForm1;
  bmp1, bmp2 : TBitmap;
implementation

{$R *.dfm}
und dann:
Code:
procedure TForm1.FormCreate(Sender: TObject);
begin
bmp1 := TBitmap.Create;
bmp2 := TBitmap.Create;
end;
das müsste doch eigentlich reichen, oder?

Neutral General 11. Apr 2011 20:39

AW: BitBld und Anzeige in Image
 
Hallo,

Die Zeile

Delphi-Quellcode:
Image2.Picture.Bitmap := bmp2;


stimmt schon. Im Setter des Bitmaps wird das zugewiesene Bitmap assigned.
Daran liegts nicht.

Ich tippe mal, dass es so gehen könnte:
Delphi-Quellcode:
procedure TForm1.Button5Click(Sender: TObject);
var breite, hoehe: integer;
begin
  breite := bmp1.Width-5;
  hoehe := bmp1.Height-7;

  // Maße von bmp2 setzen
  bmp2.Width := breite;
  bmp2.Height := hoehe;

  BitBlt(bmp2.Canvas.Handle,0,0,breite,hoehe,bmp1.Canvas.Handle,0,0,SRCCOPY);
  Image2.Picture.Bitmap := bmp2;
end;

nezumi7 11. Apr 2011 20:58

AW: BitBld und Anzeige in Image
 
Hallo Michael,

super, das wars! :-D


Vielen Dank!

Stephan.


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