AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

jpg im TImage ansprechen

Ein Thema von entwickler · begonnen am 21. Okt 2011 · letzter Beitrag vom 28. Dez 2011
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von entwickler
entwickler

Registriert seit: 16. Feb 2011
Ort: Herten
78 Beiträge
 
Delphi 5 Professional
 
#1

jpg im TImage ansprechen

  Alt 21. Okt 2011, 16:18
Hallo DP,

ich habe ein Image, was eine JPG-Datei enthält. Diese Datei habe ich vor der kompillierung geladen. Nun möchte ich diese Datei in einen Bitmap zur Laufzeit umwandeln, da ich sonst keinen Bereich daraus ausschneiden kann. Wie kann ich die JPG in meinem Image1 ansprechen?

Folgendes funktioniert nicht:

Form1.Image1.Picture.JPG

Ich hoffe ihr versteht, was ich meine.

Geändert von entwickler (21. Okt 2011 um 16:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: jpg im TImage ansprechen

  Alt 21. Okt 2011, 16:43
vorher Image1.Picture auf assignment prüfen ..

Delphi-Quellcode:
Procedure GetBitMap4Graphic(var bmp:TBitmap;Gra:TGraphic);
begin
  if Assigned(gra) then
    begin
      bmp.Width := gra.Width;
      bmp.Height := gra.Height;
      bmp.Canvas.Draw(0,0,gra);
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  bmp:TBitmap;
begin
  bmp := TBitMap.Create;
  bmp.PixelFormat := pf32bit;
  try
     GetBitMap4Graphic(bmp,Image1.Picture.Graphic);
     bmp.SaveToFile('C:\temp\test.bmp');
  finally
    bmp.Free;
  end;
end;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.617 Beiträge
 
Delphi 12 Athens
 
#3

AW: jpg im TImage ansprechen

  Alt 21. Okt 2011, 17:18
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  bmp:TBitmap;
begin
  bmp := TBitMap.Create;
  try
    bmp.Assign(Image1.Picture.Graphic);
    bmp.SaveToFile('C:\temp\test.bmp');
  finally
    bmp.Free;
  end;
end;
Erscheint mir einfacher.
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
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: jpg im TImage ansprechen

  Alt 21. Okt 2011, 17:29
stimmt ....
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von entwickler
entwickler

Registriert seit: 16. Feb 2011
Ort: Herten
78 Beiträge
 
Delphi 5 Professional
 
#5

AW: jpg im TImage ansprechen

  Alt 31. Okt 2011, 13:38
@ DeddyH

ich muss den Bitmap aber nicht speichern, ich kann den auch so benutzen, oder?
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: jpg im TImage ansprechen

  Alt 31. Okt 2011, 13:42
klar....
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.021 Beiträge
 
Delphi 12 Athens
 
#7

AW: jpg im TImage ansprechen

  Alt 31. Okt 2011, 13:55
Das war nur ein Beispiel ... also nein, mußt du nicht.
Der Wichtige teil ist bmp.Assign(Image1.Picture.Graphic); , welcher den Bildinhalt einer anderen Komponente zuweist, bzw. rüberkopiert.

Ansonsten ist das Bild ja in TImage.Picture enthalten, über TImage.Picture.Graphic zugänglich
und wenn man den Typ kennt,
Delphi-Quellcode:
if Assigned(Image1.Picture.Graphic) then
  ShowMessage('Bild vom Typ "' + Image1.Picture.Graphic.ClassName + '" enthalten')
else
  ShowMessage('kein Bild enthalten');
dann kann man auch auf dessen Eigenschaften zugreifen.
(Image1.Picture.Graphic as TJPEGImage).Bitmap

Das TJPEGImage von delphi hat ein "geheimes" Bitmap, welche man für direkte Lesezugriffe verwenden könnte.
Nur Lezezugriffe möglich. (Änderungen werden nicht in das JPEG übernommen)
Auch sollte an dieses nur direkt verwenden, also nur direkt nachdem man sich diese Bitmap-Referenz besort hat, denn es kann sein, daß beim nächsten zugriff auf das JPEG dieses Bitmap wieder verschwindet und somit die Referenz ungültig würde.
> property Bitmap: TBitmap read GetBitmap; // volatile > Das "volatile" steht nicht umsonst in der Deklaration.

Um das nutzen zu können, muß man entweder sich einen neuen Typ deklarieren (ähnlich wie Nachfolgendes) und das TJPEGImage hart casten oder man fügt einfach Folgendes an den anfang seiner Unit ein, dann wird quasi automatisch gecastet.
Delphi-Quellcode:
type
  TJPEGImage = class(jpeg.TJPEGImage)
  public
    property Bitmap;
  end;

// Oder die Kurzfassung, da unit-intern Protected-Deklarationen dennoch wie Public wirken.
type TJPEGImage = class(jpeg.TJPEGImage);
Nja, jedenfalls kann man dieses Bitmap dennoch gut nutzen, um sich dort seinen Teil rauszukopieren.
Wobei man statt Assign uch zeichnen kann.
Das Zielbild ist kleiner und wenn nan dann noch die Quelle passend verschiebt, hat man nur noch einen Ausschnitt im Ziel.
Man könnte vorher auch noch ein ClipRect über das Ziel legen, damit nur in einem bestimmten Bereich gezeichnet wird.
Delphi-Quellcode:
DeinZielCanvas.CopyRect(Zielbereich, (Image1.Picture.Graphic as TJPEGImage).Bitmap.Canvas, Quellausschnitt);

DeinZielCanvas.Draw(-100, -200, Image1.Picture.Graphic);
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (31. Okt 2011 um 14:08 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von entwickler
entwickler

Registriert seit: 16. Feb 2011
Ort: Herten
78 Beiträge
 
Delphi 5 Professional
 
#8

AW: jpg im TImage ansprechen

  Alt 3. Nov 2011, 12:23
Danke Himitsu!

Wo du's schon ansprichst...
Mein PC ist nicht gerade der neuste und verfügt über wenig RAM und so.
Nun kann ich in einem TImage nur bis zu einer bestimmten größe von X000 * X000 Pixeln zeichnen lassen (Image1.Canvas.Draw).

Es belastet meinen Computer ziemlich stark, wenn ich eine 2000 x 2000 Pixel große zeichenfläche "übermale". Jetzt habe ich mir die Frage gestellt, ob ich einen Teilbereich aus einem Image anzeigen lassen kann, wobei der Rest des Bildes nicht "beachtet" wird, um darin zu zeichnen. Du hast was von ClipRect geschrieben. Wie funktioniert das genau?
  Mit Zitat antworten Zitat
Benutzerbild von entwickler
entwickler

Registriert seit: 16. Feb 2011
Ort: Herten
78 Beiträge
 
Delphi 5 Professional
 
#9

AW: jpg im TImage ansprechen

  Alt 3. Nov 2011, 12:49
Und ich habe herausgefunden, das JPEG keine Transparenz unterstützt, daher will ich jetzt ein PNG- Bild benutzen. Wie kann ich schon vor der Compilierung eine PNG-Datei in das Image packen?
  Mit Zitat antworten Zitat
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.134 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: jpg im TImage ansprechen

  Alt 3. Nov 2011, 13:15
unter http://www.delphipraxis.net/164197-i...ion-ab-xe.html ein 5 zeiler um Formate umzuwandeln
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:50 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