AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Bilder [mit/ohne Transparenz] in universelles Format bringen
Thema durchsuchen
Ansicht
Themen-Optionen

Bilder [mit/ohne Transparenz] in universelles Format bringen

Offene Frage von "Jens01"
Ein Thema von berens · begonnen am 16. Aug 2016 · letzter Beitrag vom 17. Aug 2016
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von himitsu
himitsu

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

AW: Bilder [mit/ohne Transparenz] in universelles Format bringen

  Alt 16. Aug 2016, 15:04
Wenn der Benutzer ein Bild auswählt erzeuge anhand der Dateiendung ein Objekt der entsprechenden TGraphic-Klasse (TPNGImage, TBitmap, ...).
Nja, bezüglich TImage ... joar, ist blöd, vorallem wenn nicht-visuell.

Aber man kann auch TPicture direkt verwenden.
Bei dem registrieren sich standardmäßig alle TGraphic-Klassen mit ihren Dateiendungen.
Picture.LoadFromStream geht da leider nicht, da diese Delphi-Klassen ausschließlich auf die Dateiendung achten, welche es beim Stream nicht gibt.
Picture.LoadFromFile nimmt dann anhand der Dateiendung eine der registrierten TGraphic, erstellt davon eine Instanz in Picture.Graphic und läd da rein dann das Bild.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von bytecook
bytecook

Registriert seit: 6. Aug 2010
Ort: Dornbirn
151 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: Bilder [mit/ohne Transparenz] in universelles Format bringen

  Alt 16. Aug 2016, 15:08
Also sooo langsam ist ein TWICImage dann doch nicht. Ein LoadFromFile dauert weniger als eine Sekunde...natürlich hängt es etwas von der Dateigröße und dem Speicherort ab.

Sherlock
Stimmt Hängt aber davon ab, wie groß die Texturen oder Graphiken sein sollen - und ob du auf deinem System DirectX installieren kannst...
Peter
  Mit Zitat antworten Zitat
berens

Registriert seit: 3. Sep 2004
431 Beiträge
 
Delphi 2010 Professional
 
#13

AW: Bilder [mit/ohne Transparenz] in universelles Format bringen

  Alt 16. Aug 2016, 15:10
Mit TWICImage geht es durchaus schnell und zuverlässig! (Oben habe ich den Code mit Edit nachgetragen um nicht Antworten zu spammen).

Nur wie verkleinere ich die Bilder? Wie gesagt, der verlinkte Code erfordert Units, die ich nicht habe...

Edit: Danke @bytecook für den Code, aber ich lade explizit nicht über die TPortableNetworksGraphic32, weil die Dateien ja auch was anderes als .png sein können. Kann natürlich sein, dass die wegen Vererbung von TBitmap32 auch JPEG etc. lädt, aber naja...

Natürlich ist TPicture stilvoller als TImage, mal schauen, was im fertigen Code übrigbleibt.
Delphi 10.4 32-Bit auf Windows 10 Pro 64-Bit, ehem. Delphi 2010 32-Bit auf Windows 10 Pro 64-Bit

Geändert von berens (16. Aug 2016 um 15:13 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#14

AW: Bilder [mit/ohne Transparenz] in universelles Format bringen

  Alt 16. Aug 2016, 15:12
Ich kenn das TWICImage nicht..
Aber wenn das auf GDI+ basiert könnte das verkleinern mit DrawImageRectRectI funktionieren.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von bytecook
bytecook

Registriert seit: 6. Aug 2010
Ort: Dornbirn
151 Beiträge
 
Delphi 11 Alexandria
 
#15

AW: Bilder [mit/ohne Transparenz] in universelles Format bringen

  Alt 16. Aug 2016, 15:16
Ich kenn das TWICImage nicht..
Aber wenn das auf GDI+ basiert könnte das verkleinern mit DrawImageRectRectI funktionieren.

gruss
TWicImage ist bei Delphi mit an Bord...

Aber: Hier schon mal nachgesehen? http://www.dev-center.de/header/glbitmap
Imho solltest du ganz einfach die Textur laden können, da png unterstützt wird.

Ansonsten mal im DGL Forum Bergmann89 fragen, der gited ja die TGlBitmap...
Peter
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.762 Beiträge
 
Delphi 11 Alexandria
 
#16

AW: Bilder [mit/ohne Transparenz] in universelles Format bringen

  Alt 16. Aug 2016, 15:18
Die Unit winapi.wincodec gibt es unter D2010 noch nicht?

Eventuell ohne Namespace...oder nur winapi.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
berens

Registriert seit: 3. Sep 2004
431 Beiträge
 
Delphi 2010 Professional
 
#17

AW: Bilder [mit/ohne Transparenz] in universelles Format bringen

  Alt 16. Aug 2016, 15:20
Leider verfügt weder TWicImage nach TPNGImage (als "Mittelsmann"), noch TPortableNetworkGraphic32 über einen Canvas, auf den ich mit Stretchdraw zeichen könnte.

> Ich kenn das TWICImage nicht..
Der Aussage kam nicht von mir, ich kann es ja problemlos benutzen.

Auf glBitmap soll das ganze ja letztendlich drauf. Leider _muss_ ich die Graphiken bearbeiten (verkleinern) bevor ich sie an glBitmap übergebe. Und je nach Dateiformat kann es mit glBitmap zu gewaltigen Problemen kommen, deshalb bin _ich_ für eine gültige Graphik zuständig und muss diese sicherstellen.

Edit: Es gibt tatsächlich die WinCodec Unit, damit geht das Resize (hatte versucht "WindowsCodec" wie in der Hilfe beschrieben zu verwenden). Jetzt muss ich den Code nur noch für Breite und Höhe anpassen:

Delphi-Quellcode:
procedure ResizeImage(aWICImage: TWICImage; NewWidth:Integer; NewHeight: Integer);
var
  scale: IWICBitmapScaler;
  wicBitmap: IWICBitmap;
begin
  if Assigned(aWICImage) then
  begin
    aWICImage.ImagingFactory.CreateBitmapScaler( scale);
    scale.Initialize(aWICImage.Handle, NewWidth, NewHeight, WICBitmapInterpolationModeFant);
    aWICImage.ImagingFactory.CreateBitmapFromSourceRect(scale, 0,0,NewWidth, NewHeight, wicBitmap);
    if Assigned(wicBitmap) then
      aWICImage.Handle := wicBitmap;
  end;
end;
Delphi 10.4 32-Bit auf Windows 10 Pro 64-Bit, ehem. Delphi 2010 32-Bit auf Windows 10 Pro 64-Bit

Geändert von berens (16. Aug 2016 um 15:31 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Bilder [mit/ohne Transparenz] in universelles Format bringen

  Alt 16. Aug 2016, 15:25
Liegt im XE in der Graphics.pas und Wincodec.pas

Einen HDC finde ich auch nicht, wo man ein TCanvas dran hängen könnte.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (16. Aug 2016 um 15:34 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#19

AW: Bilder [mit/ohne Transparenz] in universelles Format bringen

  Alt 16. Aug 2016, 15:27
Ich verstehe das Problem jetzt nicht.
Du lädst eine Grafik (Bild) über TWicImage.

Danach konvertierst du dieses in eine Texture ?
Dann sollte doch nach einem glBindTexture über Quader diese sich verkleinern lassen.

Oder sehe ich da was falsch?

gruss
  Mit Zitat antworten Zitat
Benutzerbild von bytecook
bytecook

Registriert seit: 6. Aug 2010
Ort: Dornbirn
151 Beiträge
 
Delphi 11 Alexandria
 
#20

AW: Bilder [mit/ohne Transparenz] in universelles Format bringen

  Alt 16. Aug 2016, 15:28
Leider verfügt weder TWicImage nach TPNGImage (als "Mittelsmann"), noch TPortableNetworkGraphic32 über einen Canvas, auf den ich mit Stretchdraw zeichen könnte.

> Ich kenn das TWICImage nicht..
Der Aussage kam nicht von mir, ich kann es ja problemlos benutzen.

Auf glBitmap soll das ganze ja letztendlich drauf. Leider _muss_ ich die Graphiken bearbeiten (verkleinern) bevor ich sie an glBitmap übergebe. Und je nach Dateiformat kann es mit glBitmap zu gewaltigen Problemen kommen, deshalb bin _ich_ für eine gültige Graphik zuständig und muss diese sicherstellen.
Deswegen würde ich eben Graphics32 nehmen...

1) Bild via LoadPng it ein TBitmap32 laden.
2) Bild auf gewünschte Größe resamplen. (Am besten je nach Geschmack/Quali mit einem Lanczos Resampler). Die meisten Lowlevel-Routinen in Gr32 sind SSE2 optimiert, also seeeehr schnell...
3) Verkleinertes Bild auf GlBitmap via Scanline übertragen. (Siehe https://delphigl.com/forum/viewtopic...hics32#p100074)

oder ...

3b) eine Titan X kaufen

Raster Resampling Infos:
http://graphics32.org/documentation/...terization.htm
http://graphics32.org/documentation/...lers/_Body.htm
Peter

Geändert von bytecook (16. Aug 2016 um 15:49 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 02:36 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