Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Bild aus Datei mit StretchBlt passend in TImage anzeigen (https://www.delphipraxis.net/179625-bild-aus-datei-mit-stretchblt-passend-timage-anzeigen.html)

thestallion90 20. Mär 2014 13:32

Bild aus Datei mit StretchBlt passend in TImage anzeigen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hey Leute,

leider hat Google und die Foren-Suche ausnahmsweise mal nichts brauchbares ergeben :( Ich verstehe einfach nicht, warum StretchBlt bei mir nicht die richtige Wirkung erziehlt (bzw überhaupt irgendeine Wirkung wäre schon gerne gesehen).

Was passieren soll habe ich im Anhang skizziert.

Folgender Code:

Delphi-Quellcode:
procedure SetPic(l_picname : String);
var l_Image : TImage;
    l_Src_Bitmap, l_Dest_Bitmap : TBitmap;
begin
  //initialisieren...
  l_Image := TImage.Create(Self);
  l_Src_Bitmap := TBitmap.Create;
  l_Dest_Bitmap := TBitmap.Create;
  try
  //Bild laden...
  l_Image.Picture.LoadFromFile(l_picname);

  //Bild auf Quellleinwand schreiben...
  l_Src_Bitmap.Assign(l_Image.Picture.Graphic);

  //An dieser Stelle lasse ich mir die Abmessungen des Bitmap ausgeben und kann somit mit
  //Sicherheit sagen, dass auf jeden Fall die Datei geladen und hinein geschrieben wird.
  //Außerdem habe ich ausprobiert das l_src_Bitmap am Ende dem Bild zuzuweisen, das funktioniert, nur natürlich ohne resize

  //Bild auf Zielleinwand schreiben...
  SetStretchBltMode(l_Src_Bitmap.Canvas.Handle,HALFTONE);  //Ich bin mir nich sicher wo ich die BltMode umstellen muss
  SetStretchBltMode(l_Dest_Bitmap.Canvas.Handle,HALFTONE); //Ich bin mir nich sicher wo ich die BltMode umstellen muss
  StretchBlt(l_Dest_Bitmap.Canvas.Handle,
             0, 0, Image1.Width, Image1.Height,
             l_Src_Bitmap.Canvas.Handle,
             0, 0, l_Src_Bitmap.Width, l_Src_Bitmap.Height,
             SRCCOPY);

  //Fertige Bild von Zielleinwand auf TImage-Komponente anzeigen...
  Image1.Picture.Assign(l_Dest_Bitmap);
  finally
    l_Image.Free;
    l_Src_Bitmap.Free;
    l_Dest_Bitmap.Free;
  end;
end;
Das Image enthält vor Aufruf der Methode ein Bild, nach Aufruf ist es leer. Also scheint das Assign ein leeres Bitmap zuzuweisen. Aber warum schreibt StretchBlt nicht in das l_Dest_Bitmap?

Vielen Dank schon im Voraus!

DeddyH 20. Mär 2014 13:48

AW: Bild aus Datei mit StretchBlt passend in TImage anzeigen
 
Hilft Dir das hier weiter?

grizzly 20. Mär 2014 13:58

AW: Bild aus Datei mit StretchBlt passend in TImage anzeigen
 
Hat l_Dest_Bitmap nach dem Create nicht Höhe und Breite gleich 0? Dann wird was draufgemalt (nicht viel, weil sich dabei die Größe nicht ändert), und am Ende wird dieses 0 mal 0 Pixel große Bild dem Image.Picture.Bitmap zugewiesen.
Fehlt vielleicht sowas wie beispielsweise
Delphi-Quellcode:
l_Dest_Bitmap.width := Image1.width
oder so?

Gruß
Michael

thestallion90 20. Mär 2014 14:14

AW: Bild aus Datei mit StretchBlt passend in TImage anzeigen
 
Zitat:

Zitat von DeddyH (Beitrag 1252740)
Hilft Dir das hier weiter?

Ich habe versucht deine Methode folgendermaßen zu implementieren und bekommen einen "abstract error". Ich habe mich nicht weiter damit auseinander gesetzt wo und warum genau er auftritt. Der Debugger sagt aber, dass er in "StretchGraphic" auftritt.

Delphi-Quellcode:
procedure SetActorPic(l_picname: string);
var
   Quelle, Ziel  : TGraphic;
begin
  Quelle:=TGraphic.Create;
  Ziel:=TGraphic.Create;
  try
     Quelle.LoadFromFile(l_picname);
     StretchGraphic(Quelle,Ziel,Image1.Width, Image1.Height, True);
     Image1.Picture.Assign(Ziel);
  finally
     Quelle.Free;
     Ziel.Free;
  end;
end;

Zitat:

Zitat von grizzly (Beitrag 1252742)
Hat l_Dest_Bitmap nach dem Create nicht Höhe und Breite gleich 0? Dann wird was draufgemalt (nicht viel, weil sich dabei die Größe nicht ändert), und am Ende wird dieses 0 mal 0 Pixel große Bild dem Image.Picture.Bitmap zugewiesen.
Fehlt vielleicht sowas wie beispielsweise
Delphi-Quellcode:
l_Dest_Bitmap.width := Image1.width
oder so?

Gruß
Michael

Ich liebe dich <3 Das wars, vielen Dank! :oops:

DeddyH 20. Mär 2014 14:21

AW: Bild aus Datei mit StretchBlt passend in TImage anzeigen
 
http://docwiki.embarcadero.com/Libra...phics.TGraphic
Zitat:

TGraphic bildet die abstrakte Basisklasse für Grafikobjekte, Symbole, Bitmaps und Metadateien, die Bilder speichern bzw. anzeigen können.

TGraphic ist eine abstrakte Klasse, die nicht instantiiert werden kann.
Mit Bitmaps, JPEGs oder anderen TGraphic-Abkömmlingen hätte es funktioniert.

thestallion90 20. Mär 2014 16:44

AW: Bild aus Datei mit StretchBlt passend in TImage anzeigen
 
Zitat:

Zitat von DeddyH (Beitrag 1252748)
http://docwiki.embarcadero.com/Libra...phics.TGraphic
Zitat:

TGraphic bildet die abstrakte Basisklasse für Grafikobjekte, Symbole, Bitmaps und Metadateien, die Bilder speichern bzw. anzeigen können.

TGraphic ist eine abstrakte Klasse, die nicht instantiiert werden kann.
Mit Bitmaps, JPEGs oder anderen TGraphic-Abkömmlingen hätte es funktioniert.

Ok, danke für die Info!


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