Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   RGB Werte von Bilder mit Farbtiefe mehr als 8bit (z.B.16bit, 32bit) abfragen (https://www.delphipraxis.net/158420-rgb-werte-von-bilder-mit-farbtiefe-mehr-als-8bit-z-b-16bit-32bit-abfragen.html)

jus 16. Feb 2011 21:49

RGB Werte von Bilder mit Farbtiefe mehr als 8bit (z.B.16bit, 32bit) abfragen
 
Hallo,

ich habe eine banale Frage und komme einfach nicht weiter, es ist mittlerweile in der Bildbearbeitung bei Fotos auch nicht mehr unüblich statt 8bit pro Farbkanal auch 16bit pro Farbkanal zu verwenden. Der Photoshop kann ja ohne Probleme 16-bit TIFs speichern. Wenn ich jedoch ein 16bit TIF Bild in Delphi reinlade, so kann ich doch die einzelne RGB-Werte mit getpixel oder scanline als 8bit auslesen. Doch wie kommt man an die ursprünglichen 16bit Werte pro Farbkanal ran? :gruebel:

Lg,
jus

Aphton 17. Feb 2011 00:18

AW: RGB Werte von Bilder mit Farbtiefe mehr als 8bit (z.B.16bit, 32bit) abfragen
 
Ich weiß nicht, inwiefern das bei der von dir benützten Komponente unterstützt wird, aber sofern du einen Pointer zu den Pixeln holen kannst, ist der Rest doch ein Klax, oder?
Falls das mit Scanline klappt, hier mal ein Beispiel:

Delphi-Quellcode:
{ !ungetestet! }
var
  Channel: PWord;
  i: Integer;
  r, g, b: Word;
begin
  Channel := <ImageKomponente>.Scanline[<ImageKomponente>.Height-1];
  for i := 0 to <ImageKomponente>.Height * <ImageKomponente>.Width - 1 do
  begin
    r := Channel^;
    inc( Channel );
    g := Channel^;
    inc( Channel );
    b := Channel^;
    inc( Channel );
  end;
end;

Bummi 17. Feb 2011 06:48

AW: RGB Werte von Bilder mit Farbtiefe mehr als 8bit (z.B.16bit, 32bit) abfragen
 
AFAIK hast Du in Delphi maximal 8 Bit per Pixel + Alpha.

Satty67 17. Feb 2011 11:09

AW: RGB Werte von Bilder mit Farbtiefe mehr als 8bit (z.B.16bit, 32bit) abfragen
 
Im .NET Framework wird der Typ Format64bppPArgb (also RGB+Alpha mit je 16bit pro Kanal) angeboten. Das ist ja GDI+ wofür es bei progdigy.com wrapper-Komponenten für Delphi gibt.

Aber Bummi kennt die GDI+ ja mit am besten und hätte sicher erwähnt, wenn bei GDIplus ein Bitmap-Typ mit 16bit pro Kanal dabei wäre. Ich weis es leider für Delphi nicht genau...

SirThornberry 17. Feb 2011 12:19

AW: RGB Werte von Bilder mit Farbtiefe mehr als 8bit (z.B.16bit, 32bit) abfragen
 
Zitat:

Zitat von Bummi (Beitrag 1082358)
AFAIK hast Du in Delphi maximal 8 Bit per Pixel + Alpha.

8 Bit pro Pixel? :shock: Wäre mir neu. Oder meinst du 24bit pro Pixel = 8bit pro R/G/B

Neutral General 17. Feb 2011 15:14

AW: RGB Werte von Bilder mit Farbtiefe mehr als 8bit (z.B.16bit, 32bit) abfragen
 
Mal ne (doofe) Frage: Wofür 16 Bit pro Kanal? :shock:

Medium 17. Feb 2011 15:57

AW: RGB Werte von Bilder mit Farbtiefe mehr als 8bit (z.B.16bit, 32bit) abfragen
 
Warum nicht? Es gibt Anwendungsfälle, in denen höhere Farbtiefe einfach gefordert ist. Printbereich, DTP und so Dinge. Es ist ausserdem nicht Delphi geschuldet, dass diese Bilder zu 8 Bit/Kanal verrechnet werden, sondern der Tatsache, dass Windows Bitmaps in diesem Format braucht um sie anzeigen zu können (bzw. ist das der Standardweg über GDI, welche mehr nicht kennt).
Es ist einzig und allein Sache der zum Laden verwendeten Lib Zugriff auf die original Farbdaten zu gewähren. Dass dabei dann auf alles was mit der GDI zu tun hat verzichtet werden muss, sollte allerdings klar sein.

jus 17. Feb 2011 21:31

AW: RGB Werte von Bilder mit Farbtiefe mehr als 8bit (z.B.16bit, 32bit) abfragen
 
Zunächst vielen Dank für eure Antworten.

Kennt wer so eine Bibliothek für Delphi?

Lg,
jus

Bummi 17. Feb 2011 21:34

AW: RGB Werte von Bilder mit Farbtiefe mehr als 8bit (z.B.16bit, 32bit) abfragen
 
@SirThornberry
sorry, selbstverständlich meinte ich 8 bit pro Kanal...

Neutral General 17. Feb 2011 22:46

AW: RGB Werte von Bilder mit Farbtiefe mehr als 8bit (z.B.16bit, 32bit) abfragen
 
@Medium: Jaa.. Aber wer soll denn bitte fähig sein diese ganzen Farben sehen zu können?

Medium 18. Feb 2011 02:46

AW: RGB Werte von Bilder mit Farbtiefe mehr als 8bit (z.B.16bit, 32bit) abfragen
 
Denk doch einfach mal in Richtung Weiterverarbeitung, z.B. HDR-Imaging, Composing, etc. pp. Man kann sooo viel mehr mit einem Bild machen, als es bloß anzusehen ;)

@jus: Schon mal Bei Google suchendelphi tiff etwas durchforstet? Da scheint es einen ganzen Haufen an Libs zu geben - darunter sicherlich auch welche, die nicht "Zwangsrunterrechnen". Im Zweifel bleibt auch noch die Option, sich auf wotsit die Specs zu Gemüte zu führen, und via Stream selbst einen Loader zu Knuspern :)

himitsu 18. Feb 2011 06:59

AW: RGB Werte von Bilder mit Farbtiefe mehr als 8bit (z.B.16bit, 32bit) abfragen
 
Zitat:

Zitat von SirThornberry (Beitrag 1082446)
8 Bit pro Pixel? :shock: Wäre mir neu.

Wieso nicht?
3-3-2 (RGB) = 8
Wobei es auch 11-11-10 (RGB) = 32 gibt.

Aphton 18. Feb 2011 11:46

AW: RGB Werte von Bilder mit Farbtiefe mehr als 8bit (z.B.16bit, 32bit) abfragen
 
Letzendlich ist es ja nur eine Definitionssache.
Übrigens, jus, warum bist du mit meinem Vorschlag nicht zufrieden?
Das dürfte so funktionieren!

Bummi 18. Feb 2011 19:09

AW: RGB Werte von Bilder mit Farbtiefe mehr als 8bit (z.B.16bit, 32bit) abfragen
 
@Aphton vielleiht ist alles ja nur ein großes Missverständins und er sucht nur
TPixelFormat = (pfDevice, pf1bit, pf4bit, pf8bit, pf15bit, pf16bit, pf24bit, pf32bit, pfCustom);

für Deinen Vorschlag müsste es neben, dem größten
Delphi-Quellcode:
  tagRGBQUAD = packed record
    rgbBlue: Byte;
    rgbGreen: Byte;
    rgbRed: Byte;
    rgbReserved: Byte;
  end;
noch größere Definitionen geben die zumindest von Delphiseite nicht sichtbar sind. Da ich noch keine mit Grafikkarte mehr als 32 - Bit gesehen habe glaue ich dass der Zugriff über die Bitmapebene nicht möglich sein wird.

jus 18. Feb 2011 22:50

AW: RGB Werte von Bilder mit Farbtiefe mehr als 8bit (z.B.16bit, 32bit) abfragen
 
@Aphton:
zunächst mal vielen Dank für deinen Quellcode. Wie im Anfangsbeitrag schon erwähnt sind mir auch Befehle wie z.B. scanline nicht ganz fremd. Das Problem liegt jedoch darin, dass es unter Delphi und mit Windows GDI Api nicht ganz trivial ist, direkt an die RGB Werte z.B. in 16bit-Ausführung (pro Farbkanal, sprich 16bitRed+16bitGreen+16bitBlue => 48bit) zu kommen.
Die Aussagen von Medium und Bummi decken sich mit meinen bisherigen Nachforschungen. Es scheinen die Windows Standard GDI-Funktionen und auch Delphi nur bis zu 8bit pro RGB-Farbkanal zurückzugeben. Das bedeutet für mich, dass ich mich wirklich mit einer zusätzlichen Grafikbibliothek auseinandersetzen muß, wenn ich die Werte auslesen möchte. Achja, so wie ich es verstanden habe ist scanline eher was Borland spezifisches. Wenn man die C-Sourcen von anderen Herstellern durchgeht ist selten scanline zu finden. Trotzdem finde ich scanline genial. Da muß man sich nicht um dem Alignment am Ende einer Pixelzeile kümmern.

Lg,
jus

Bummi 18. Feb 2011 23:02

AW: RGB Werte von Bilder mit Farbtiefe mehr als 8bit (z.B.16bit, 32bit) abfragen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Etwas off topic hier, aber zum Thema Scanline habe ich für 32 Bit (24=etwas umstricken) etwas experimentiert. Über die letzte Scanline zugegriffen bekommt man einen wahlfreien schnellen Zugriff auf alle "Pixel" Faktor 55 im Vergleich zu Pixels[x,y]

Aphton 18. Feb 2011 23:54

AW: RGB Werte von Bilder mit Farbtiefe mehr als 8bit (z.B.16bit, 32bit) abfragen
 
Zitat:

Zitat von jus (Beitrag 1082781)
@Aphton:
zunächst mal vielen Dank für deinen Quellcode. Wie im Anfangsbeitrag schon erwähnt sind mir auch Befehle wie z.B. scanline nicht ganz fremd. Das Problem liegt jedoch darin, dass es unter Delphi und mit Windows GDI Api nicht ganz trivial ist, direkt an die RGB Werte z.B. in 16bit-Ausführung (pro Farbkanal, sprich 16bitRed+16bitGreen+16bitBlue => 48bit) zu kommen.
Die Aussagen von Medium und Bummi decken sich mit meinen bisherigen Nachforschungen. Es scheinen die Windows Standard GDI-Funktionen und auch Delphi nur bis zu 8bit pro RGB-Farbkanal zurückzugeben. Das bedeutet für mich, dass ich mich wirklich mit einer zusätzlichen Grafikbibliothek auseinandersetzen muß, wenn ich die Werte auslesen möchte. Achja, so wie ich es verstanden habe ist scanline eher was Borland spezifisches. Wenn man die C-Sourcen von anderen Herstellern durchgeht ist selten scanline zu finden. Trotzdem finde ich scanline genial. Da muß man sich nicht um dem Alignment am Ende einer Pixelzeile kümmern.

Lg,
jus

Ohh verstehe; es ging dir eigentlich nicht um das Auslesen sondern ums Interpretiern bzw. Anzeigen eines 16 Bit Farbchannels.
Ich hab eigentlich auch spontan keine Ahnung, wie das ginge, aber, falls das nicht problematisch ist, könntest du die Werte ja runtermappen auf 8 Bit und so anzeigen - falls dir die Werte nur für eine Berechnung wichtig sind!
Und das runtermappen ginge ja so:
( Wert / Max16BitWert ) * Max8BitWert = ( 3000 / 65536 ) * 256 ~ 11 (4.5 % von 256)

Bummi 19. Feb 2011 09:07

AW: RGB Werte von Bilder mit Farbtiefe mehr als 8bit (z.B.16bit, 32bit) abfragen
 
Zitat:

falls das nicht problematisch ist, könntest du die Werte ja runtermappen auf 8 Bit und so anzeigen -
das wird das sein was ohnehin bei der Darstellung passiert......

jfheins 19. Feb 2011 10:03

AW: RGB Werte von Bilder mit Farbtiefe mehr als 8bit (z.B.16bit, 32bit) abfragen
 
Zitat:

Zitat von Bummi (Beitrag 1082807)
das wird das sein was ohnehin bei der Darstellung passiert......

Nicht unbedingt. Mit dem passenden Equipment kann man durchaus auch höhere Farbauflösungen (z.B. 10bit pro Kanal) anzeigen wenn die Software mitspielt.

Mit GDI+ kann man sowas wohl laden ( http://msdn.microsoft.com/en-us/libr...xelformat.aspx ) aber da steht auch:
Zitat:

PixelFormat48bppRGB, PixelFormat64bppARGB, and PixelFormat64bppPARGB use 16 bits per color component (channel). GDI+ version 1.0 and 1.1 can read 16-bits-per-channel images, but such images are converted to an 8-bits-per-channel format for processing, displaying, and saving. Each 16-bit color channel can hold a value in the range 0 through 2^13.
Das hört sich dann nicht so prickelnd an ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:29 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