![]() |
PNG 16 Bit Grayscale erzeugen
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:
Ändere ich die BitDepth im Constructor von 16 in 8 läuft alles wie gewünscht.
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; CodeZeilen wie:
Code:
machen mir irgendwie auch wenig Hoffnung, dass die 16 Bit Grauwertgeschichte hiermit klappt.
if Bitdepth = 16 then Bitdepth := 8;
Vielleicht kennt jemand eine Lösung des Problems oder eine passende Alternative. |
AW: PNG 16 Bit Grayscale erzeugen
Fehlermeldungen hier auch hinzuschreiben ist total out mittlerweile, oder? :gruebel:
|
AW: PNG 16 Bit Grayscale erzeugen
Meinst du die ehemalige freie PNG-Komponente.
Hab so die Erfahrung das diese mit 16-Bit Farbtiefe so ihre Probleme hat (Falschfarben) ... |
AW: PNG 16 Bit Grayscale erzeugen
Zitat:
Code:
Folgender Fehler tritt auf:
{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; 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:
Wie gesagt, ich muss das Problem nicht mit dieser Komponente lösen habe aber beim Suchen noch kein andere gefunden. |
AW: PNG 16 Bit Grayscale erzeugen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:30 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