AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte AnimatePNG

AnimatePNG

Ein Thema von EWeiss · begonnen am 20. Mär 2017 · letzter Beitrag vom 8. Jun 2018
Antwort Antwort
Seite 8 von 16   « Erste     678 910     Letzte » 
EWeiss
Projekt entfernt..

Geändert von EWeiss (24. Jul 2019 um 04:48 Uhr)
 
EWeiss
 
#71
  Alt 25. Mär 2017, 06:47
APNG Format funktioniert jetzt soweit.
2 Problem stehen noch an.

1. Transparenz wieder herstellen nach
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

Geändert von EWeiss (31. Mär 2017 um 18:35 Uhr)
  Mit Zitat antworten Zitat
Delphi-Laie

 
Delphi 10.1 Berlin Starter
 
#72
  Alt 26. Mär 2017, 15:56
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
  Mit Zitat antworten Zitat
EWeiss
 
#73
  Alt 26. Mär 2017, 15:59
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
Ja.. Das ist der sinn der Sache.
Zurück nicht hin ja. Gif -> Apng

gruss
  Mit Zitat antworten Zitat
EWeiss
 
#74
  Alt 26. Mär 2017, 19:48
Ich versuche ein HBitmap in ein GDIPlus konformes Format zu bringen

Delphi-Quellcode:
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;
Es läuft alles durch nur beim aufruf von
GDIP_DrawImageRectRectI kracht es mal wieder.

Ich sehen keinen Fehler in meinem Code.
Eventuell TBytes ?

gruss

Geändert von EWeiss (27. Mär 2017 um 19:34 Uhr)
  Mit Zitat antworten Zitat
EWeiss
 
#75
  Alt 26. Mär 2017, 20:38
Ok. APNG funktioniert nun soweit ohne das ich Tausende Units oder fremd Komponente einbinden musste.
Das Problem von oben.

Musste
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:
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;
gruss

Geändert von EWeiss (31. Mär 2017 um 18:36 Uhr)
  Mit Zitat antworten Zitat
EWeiss
 
#76
  Alt 26. Mär 2017, 21:31
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

Geändert von EWeiss (30. Mär 2017 um 22:26 Uhr)
  Mit Zitat antworten Zitat
Delphi-Laie

 
Delphi 10.1 Berlin Starter
 
#77
  Alt 27. Mär 2017, 11:37
Dieser Gif-Apng-Konverter funktioniert bei mir bei folgenden Gif-Dateien nicht:

http://sortierkino.bplaced.net/Sierp...rgroessern.gif
http://sortierkino.bplaced.net/Sierp...erkleinern.gif

Nach ein paar Sekunden zeigt er Frames=0 an, und eine apng-Datei wird auch nicht erstellt.
  Mit Zitat antworten Zitat
EWeiss
 
#78
  Alt 27. Mär 2017, 16:24
Na ja wenn mal ein, zwei Gifs nicht gehen ist das kein Problem.

greets
  Mit Zitat antworten Zitat
Delphi-Laie

 
Delphi 10.1 Berlin Starter
 
#79
  Alt 27. Mär 2017, 16:40
Na ja wenn mal ein, zwei Gifs nicht gehen ist das kein Problem.
Na, das ist doch nicht ernsthaft Dein Anspruch als Programmierer?!

Wenn etwas "nicht geht", dann liegt evtl. ein grundsätzliches Problem vor.

Genaugenommen wollte ich genau diese beiden großen GIFs in APNGs verwandeln.
  Mit Zitat antworten Zitat
EWeiss
 
#80
  Alt 27. Mär 2017, 17:15
Na ja wenn mal ein, zwei Gifs nicht gehen ist das kein Problem.
Na, das ist doch nicht ernsthaft Dein Anspruch als Programmierer?!

Wenn etwas "nicht geht", dann liegt evtl. ein grundsätzliches Problem vor.

Genaugenommen wollte ich genau diese beiden großen GIFs in APNGs verwandeln.
Der Konverter Redimensioniert die Frames von einem Gif auf die größe 512x512 wenn du 1000 Frames wie in deiner Gif vorhanden
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

Geändert von EWeiss (27. Mär 2017 um 17:18 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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