AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Bild aus Datei mit StretchBlt passend in TImage anzeigen
Thema durchsuchen
Ansicht
Themen-Optionen

Bild aus Datei mit StretchBlt passend in TImage anzeigen

Ein Thema von thestallion90 · begonnen am 20. Mär 2014 · letzter Beitrag vom 20. Mär 2014
Antwort Antwort
thestallion90

Registriert seit: 10. Aug 2008
22 Beiträge
 
Delphi XE Starter
 
#1

Bild aus Datei mit StretchBlt passend in TImage anzeigen

  Alt 20. Mär 2014, 13:32
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!
Miniaturansicht angehängter Grafiken
resize-problem.png  
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Bild aus Datei mit StretchBlt passend in TImage anzeigen

  Alt 20. Mär 2014, 13:48
Hilft Dir das hier weiter?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
grizzly

Registriert seit: 10. Dez 2004
150 Beiträge
 
Delphi XE4 Professional
 
#3

AW: Bild aus Datei mit StretchBlt passend in TImage anzeigen

  Alt 20. Mär 2014, 13:58
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 l_Dest_Bitmap.width := Image1.width oder so?

Gruß
Michael
  Mit Zitat antworten Zitat
thestallion90

Registriert seit: 10. Aug 2008
22 Beiträge
 
Delphi XE Starter
 
#4

AW: Bild aus Datei mit StretchBlt passend in TImage anzeigen

  Alt 20. Mär 2014, 14:14
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;

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 l_Dest_Bitmap.width := Image1.width oder so?

Gruß
Michael
Ich liebe dich <3 Das wars, vielen Dank!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Bild aus Datei mit StretchBlt passend in TImage anzeigen

  Alt 20. Mär 2014, 14:21
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
thestallion90

Registriert seit: 10. Aug 2008
22 Beiträge
 
Delphi XE Starter
 
#6

AW: Bild aus Datei mit StretchBlt passend in TImage anzeigen

  Alt 20. Mär 2014, 16:44
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!
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:31 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