AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi PNG 16 Bit Grayscale erzeugen
Thema durchsuchen
Ansicht
Themen-Optionen

PNG 16 Bit Grayscale erzeugen

Ein Thema von CarlAshnikov · begonnen am 28. Nov 2011 · letzter Beitrag vom 29. Nov 2011
Antwort Antwort
CarlAshnikov

Registriert seit: 18. Feb 2011
Ort: Erfurt
108 Beiträge
 
Delphi XE5 Enterprise
 
#1

PNG 16 Bit Grayscale erzeugen

  Alt 28. Nov 2011, 13:45
Hallo,

für ein aktuelles Projekt soll ich das Bild einer Kamera, dass ich in 12bit Helligkeitswerten abrufe, als 16bit PNG abspeichern.

Versucht habe ich das Ganze mit PNGImage. Beim Speichern der Datei bekomme ich allerdings eine Exception. Folgendes klappt schon nicht:
Code:
  PNG := tPNGobject.CreateBlank(COLOR_GRAYSCALE, 16, 1024, 512);
  try
    for Y := 0 to 511 do
    begin
      for X := 0 to 1023 do
      begin
        PNG.Pixels[X, Y] := 1;
      end;
    end;
    PNG.SaveToFile('test.png');
  finally
    PNG.free;
  end;
Ändere ich die BitDepth im Constructor von 16 in 8 läuft alles wie gewünscht.
CodeZeilen wie:
Code:
if Bitdepth = 16 then Bitdepth := 8;
machen mir irgendwie auch wenig Hoffnung, dass die 16 Bit Grauwertgeschichte hiermit klappt.

Vielleicht kennt jemand eine Lösung des Problems oder eine passende Alternative.
Sebastian
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#2

AW: PNG 16 Bit Grayscale erzeugen

  Alt 28. Nov 2011, 14:29
Fehlermeldungen hier auch hinzuschreiben ist total out mittlerweile, oder?
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: PNG 16 Bit Grayscale erzeugen

  Alt 28. Nov 2011, 14:35
Meinst du die ehemalige freie PNG-Komponente.

Hab so die Erfahrung das diese mit 16-Bit Farbtiefe so ihre Probleme hat (Falschfarben) ...
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
CarlAshnikov

Registriert seit: 18. Feb 2011
Ort: Erfurt
108 Beiträge
 
Delphi XE5 Enterprise
 
#4

AW: PNG 16 Bit Grayscale erzeugen

  Alt 29. Nov 2011, 06:31
Fehlermeldungen hier auch hinzuschreiben ist total out mittlerweile, oder?
Falls es etwas hilft, aus der PNGImage.pas:
Code:
{Saves the PLTE chunk to a stream}
function TChunkPLTE.SaveToStream(Stream: TStream): Boolean;
var
  J: Integer;
  DataPtr: pByte;
  BitmapInfo: TMAXBITMAPINFO;
  palEntries: TMaxLogPalette;
begin
  {Adjust size to hold all the palette items}
  if fCount = 0 then fCount := Header.BitmapInfo.bmiHeader.biClrUsed;
  ResizeData(fCount * 3);
  {Get all the palette entries}
  fillchar(palEntries, sizeof(palEntries), #0);
  GetPaletteEntries(Header.ImagePalette, 0, 256, palEntries.palPalEntry[0]);
  {Copy pointer to data}
  DataPtr := fData;

  {Copy palette items}
  BitmapInfo := Header.BitmapInfo;
  FOR j := 0 TO fCount - 1 DO
    with palEntries.palPalEntry[j] do
    begin
      DataPtr^ := Owner.InverseGamma[peRed]; inc(DataPtr); <---- Exception
      DataPtr^ := Owner.InverseGamma[peGreen]; inc(DataPtr);
      DataPtr^ := Owner.InverseGamma[peBlue]; inc(DataPtr);
    end {with BitmapInfo};

  {Let ancestor do the rest of the work}
  Result := inherited SaveToStream(Stream);
end;
Folgender Fehler tritt auf:

Zugriffsverletzung bei Adresse 00450768 in Modul 'Project1.exe'. Lesen von Adresse 00134000. Prozess angehalten. ...

Ich gehe davon aus, dass an mancher Stelle mit 16 Bit und an anderer Stelle mit 8 Bit gearbeitet wird und dann auf Speicherbereiche zugegriffen wird wo einfach nichts ist.

Zitat:
Hab so die Erfahrung das diese mit 16-Bit Farbtiefe so ihre Probleme hat (Falschfarben) ...
Ist mir eigentlich egal da ich nur Grauwerte brauche . Oder betrifft die das auch?

Wie gesagt, ich muss das Problem nicht mit dieser Komponente lösen habe aber beim Suchen noch kein andere gefunden.
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: PNG 16 Bit Grayscale erzeugen

  Alt 29. Nov 2011, 07:44
Wie gesagt, ich muss das Problem nicht mit dieser Komponente lösen habe aber beim Suchen noch kein andere gefunden.
Du könntest mit der Trial von Delphi XE2 schauen ob dort es geht oder die Komponenten von LMD ausprobieren. Diese basieren auf der freien PNG-Komponente haben aber schon einige Bugfixes erhalten.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort


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