Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Schnelles nachladen von Bilddateien (https://www.delphipraxis.net/157548-schnelles-nachladen-von-bilddateien.html)

rollstuhlfahrer 16. Jan 2011 20:43

AW: Schnelles nachladen von Bilddateien
 
Direct3D und OpenGL sind, wie der Name schon vermuten lässt, Frameworks für 3D-Grafik und nicht für den 2D-Bereich. Das lässt sich auch nicht einfach umstellen. Bei OpenGL gibt es aber eine Funktion, die der Welt sagt, dass sie flach ist und dementsprechend auch keine Tiefe gezeichnet wird. Sowas wird es für Direct3D auch geben (hab ich so im Gefühl).

Bernhard

Namenloser 16. Jan 2011 20:58

AW: Schnelles nachladen von Bilddateien
 
Man kann sowohl OpenGL als auch Direct3D ohne Probleme für 2D benutzen. Sogar die Windows-Oberfläche selbst basiert ab Vista auf Direct3D. Für OpenGL gibt's ein 2D-Tutorial auf DelphiGL.

Memnarch 16. Jan 2011 21:12

AW: Schnelles nachladen von Bilddateien
 
SO, also irgendwas mache ich hier falsch:

Code:
procedure LoadIdToImage(AId: Integer; ABitmap: TBitmap);
var
  Image: TGPImage;
  LStream: TMemoryStream;
  LStreamAdapter: TStreamAdapter;
begin
  LStream := TMemoryStream.Create;
  PackHelper.GetPackItem(AId, LStream);
  LStream.seek(0,soFromBeginning);
  LStreamAdapter := TStreamAdapter.Create(LStream, soReference);

  Image := TGPImage.Create();
  Image.FromStream(LStreamAdapter);
  try
    GPImageIntoBitmap(Image, ABitmap);
  finally
    Image.Free;
    LStreamAdapter.Free;
    LStream.Free;
  end;
end;
Kurz vorweg: Packhelper ist eine selbtgeschriebene klasse, die in dder Lage ist, dateien in meine Packete reinzupacken und rauszuholen.
Die GetPacketItem holt für den angegebenen Index die daten und packt sie in den übergebenen MemoryStream. GPImageIntoBitmap ist wie das Original von Xaromz, nur wird hier keine Bitmap zurückgegeben sondern in eine vorhandene übertragen.

GPImageIntoBitmap funzt ganz sicher, die benutze ich nämlcih auch, wnen ich TGPImage direkt von der Platte lade.

Der stream der von meinem PackHelper übergeben wird, scheint auch in ordnung zu sein. Ich haben den Erhaltenen Memorystream zu testzwecken einfach direkt als png file abgespeichert, resultat war die angeforderte Bildatei und schien auch OK zu sein.

Mach ich da oben was beim TSreamadapter komplett falsch?
Oder darf ich dne garnicht direkt übergeben? Sondenr muss das erst in einen IStream clonen ?

DAs problem ist nämlch, dass ich am ende eine "Ungültige Zeigeroperation" bekomme >.<

EDIT: achherje, habe gerade gesehen das CLONE nichteinmal implimentiert ist o.O. Aber hier gibts ne lösung die ich mal Probieren werde:
LINK

EDIT: nö klappt nochimmer nicht >.<.

EDIT2: schon gelöst, ich musste den TStreamAdapter constructor auf ein ISTREAM objeckt und auf kein TStreamAdapter anwenden XD

MFG
Memnarch

rollstuhlfahrer 18. Jan 2011 13:38

AW: Schnelles nachladen von Bilddateien
 
Vielleicht noch so am Rande, der Original-Screensaver arbeitet wohl auch mit diesen Regionen. Man kann nämlich die Maus in den Flächen bewegen, wo der Desktop durchscheint und der Screensaver beendet sich nicht. Nur wenn zwischendurch eine schwarze Fläche in den Weg gerät. Heißt, du bräuchtest all diese Bilder gar nicht. Du kannst dir eine Masken-Datei anlegen und somit dein schwarzes Form immer wieder anpassen.
So kommst du auch auf die angesprochenen 1 Byte / Pixel. Wenn du diese Datei (bei mir sind es 0en und 1en) noch komprimieren lässt (GZip, Zip, etc.) kommst du am Ende auf weniger als 1 Byte / Pixel.

Ich werde dich jetzt nicht zwingen, das exakt so zu machen. Deine Methode hat auch was.

Bernhard

Namenloser 18. Jan 2011 14:06

AW: Schnelles nachladen von Bilddateien
 
Zitat:

Zitat von rollstuhlfahrer (Beitrag 1075529)
So kommst du auch auf die angesprochenen 1 Byte / Pixel. Wenn du diese Datei (bei mir sind es 0en und 1en) noch komprimieren lässt (GZip, Zip, etc.) kommst du am Ende auf weniger als 1 Byte / Pixel.

Dann pack noch ein paar Prefilter-Algorithmen rein, und du hast PNG :mrgreen:

Memnarch 18. Jan 2011 15:03

AW: Schnelles nachladen von Bilddateien
 
Die regionen stelle ich mir eher problematischer for, weil aufwändiger. Zweitens können regionen doch eig. gar nicht semitransparent sein oder?

Muss auch nochmal eben etwas ausprobieren, aber ein layered windows ist an 100% durchsichtigen stellen, auch durchklickbar ;). Das erledigt windows perpixel automatisch^^

EDIT: und wenn er regionen nutzen würde, würde er ein vektorformat zum speichern nutzen und dann wäre der originale screensaver doch nicht 160MB oder o.O

MFG
Memnarch

himitsu 23. Mai 2023 02:21

AW: Schnelles nachladen von Bilddateien
 
Vorhin im NAS ausversehn drüber gestolpert.

Nja, auf 4K sah es erstmal schlimm aus, aber installiert und in den Einstellungen die Qualli hochgeschraubt, geht es schon noch halbwegs.


Schon interessant, dass dieses Video über all die Jahre immernoch aktuell ist
und immernoch welche damit rumspielen.

Mit FlipDisplay, auf uralten 8-Bit-Spielekonsolen oder eine KI (StableDiffusion) drübergejagt und dort farbige Figuren reingerändert (anhand von bunten Bildern der Figuren).


[edit] Ups, wollte eigentlich dort
https://www.delphipraxis.net/157689-...rekriiert.html


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:43 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz