![]() |
AW: AnimatePNG
APNG Format funktioniert jetzt soweit.
2 Problem stehen noch an. 1. Transparenz wieder herstellen nach
Delphi-Quellcode:
GDIP_CreateBitmapFromHBITMAP(Bitmap, 0, pBitmap);
2. Etwas an der Schraube drehen was die CPU Belastung angeht. (Mache da noch irgend etwas falsch.) :) Normalerweise sollte diese Gegen 0% gehen. Anschließend muss ich noch ein Tool erstellen mit dem man APNG Dateien erstellen kann (Drag-Drop) sollte reichen. Mein Problem mit der Transparenz ist das ich hier kein TBitmap verwende dem ich einfach das HBitmap als Handle übergeben könnte. Hab noch nicht die richtige Lösung für das Problem gefunden. gruss |
AW: AnimatePNG
Ich las jetzt alle Deine Beiträge durch, Emil, aber eine Aussage konnte ich nicht entdecken, deshalb frage ich danach: Ist es angedacht, irgendwann einmal eine Konvertierungsfunktion von gif nach apng (und ggf. sogar zurück) anzubieten?
Gruß Delphi-Laie |
AW: AnimatePNG
Zitat:
Zurück nicht hin ja. Gif -> Apng gruss |
AW: AnimatePNG
Ich versuche ein HBitmap in ein GDIPlus konformes Format zu bringen
Delphi-Quellcode:
Es läuft alles durch nur beim aufruf von
function BitmapToImage(Hdib: HBitmap): Pointer;
var lpImg: Pointer; bi: tagBITMAPINFO; bm: Bitmap; BitmapLength: LongWord; bmpBits: TBytes; DC: HDC; begin Result := nil; DC := GetDc(0); if Hdib <> 0 then begin GetObject(Hdib, sizeof(bm), @bm); bi.bmiHeader.biSize := SIZEOF(bi.bmiHeader); bi.bmiHeader.biWidth := bm.bmWidth; bi.bmiHeader.biHeight := -bm.bmHeight; bi.bmiHeader.biPlanes := 1; bi.bmiHeader.biBitCount := 32; bi.bmiHeader.biCompression := BI_RGB; BitmapLength := bm.bmWidth * bm.bmHeight * 4; SetLength(bmpBits, BitmapLength + 1); GetDIBits(DC, Hdib, 0, bm.bmHeight, @bmpBits[0], bi, DIB_RGB_COLORS); if @bmpBits[0] <> nil then begin if Gdip_CreateBitmapFromScan0(bm.bmWidth, bm.bmHeight, bm.bmWidth * 4, PixelFormat32bppARGB, @bmpBits[0], lpImg) = OK then Result := lpImg; end; ReleaseDC(0, DC); end; end; GDIP_DrawImageRectRectI kracht es mal wieder. Ich sehen keinen Fehler in meinem Code. Eventuell TBytes ? gruss |
AW: AnimatePNG
Ok. APNG funktioniert nun soweit ohne das ich Tausende Units oder fremd Komponente einbinden musste.
Das Problem von oben. Musste
Delphi-Quellcode:
bmpBits: TBytes;
in meine Classe TAnimatePNG Privat verschieben danach ging es. Andererseits ist obige Funktion nicht das wahre vom Ei da ich dort ein unnötiges DC aufrufen muss. Also dann besser so. Ok zurück muss doch die obere verwenden diese hier ist wegen der Kompatibilität zu 16Bit.
Delphi-Quellcode:
gruss
function TAnimatePng.BitmapToImage(Hdib: HBitmap): Pointer;
type TByteArray = array of Byte; var BitmapLength: LongWord; bi: tagBITMAP; lpImg: Pointer; begin Result := nil; bmpBits := nil; GetObject(Hdib, sizeof(bi), @bi); BitmapLength := bi.bmWidth * bi.bmHeight * (bi.bmBitsPixel div 8); SetLength(bmpBits, BitmapLength + 1); GetBitmapBits(Hdib, BitmapLength, @bmpBits[0]); if @bmpBits[0] <> nil then begin if Gdip_CreateBitmapFromScan0(bi.bmWidth, bi.bmHeight, bi.bmWidth * 4, PixelFormat32bppARGB, @bmpBits[0], lpImg) = OK then Result := lpImg; end; DeleteObject(Hdib); end; |
AW: AnimatePNG
OK. Hier neue Version mit APNG Support allerdings erst mal nur Binär da ich noch etwas an der CPU last schrauben muss.
Da ihr keine APNG Dateien habt müsst ihr das kleine Tool GifToAPNG verwenden. Eine Animierte Gif Datei mit Drag Drop drauf ziehen danach wird eine Meldung ausgegeben wie viele Frames im APNG enthalten sind und die Datei unter gleichen Namen mit der Erweiterung "PNG" abgespeichert. Die Dateien können mit jedem Bild Viewer angesehen werden allerdings NICHT Animiert. Es wird dann nur das erste Bild angezeigt. Ihr könnt wenn das APNG abgespielt wird die Geschwindigkeit ändern und anschließend in das APNG speichern. gruss |
AW: AnimatePNG
Dieser Gif-Apng-Konverter funktioniert bei mir bei folgenden Gif-Dateien nicht:
![]() ![]() Nach ein paar Sekunden zeigt er Frames=0 an, und eine apng-Datei wird auch nicht erstellt. |
AW: AnimatePNG
Na ja wenn mal ein, zwei Gifs nicht gehen ist das kein Problem.
greets |
AW: AnimatePNG
Zitat:
Wenn etwas "nicht geht", dann liegt evtl. ein grundsätzliches Problem vor. Genaugenommen wollte ich genau diese beiden großen GIFs in APNGs verwandeln. |
AW: AnimatePNG
Zitat:
auf die Größe von 512x512 umlegst was glaubst du ist davon noch zu zeichnen wenn ich die Komplette Datei dann in den Speicher lade. Der Konverter ist aber im Moment mal nebensächlich. Von dir mal abgesehen scheint nicht wirklich jemand Interesse an dem Teil zu haben daher lege ich das erst mal auf's Eis da ich die CPU last nicht in den griff bekomme. gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:57 Uhr. |
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