Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Farbraum bzw Farbmodell eines Bildes herausfinden bzw ändern

Frage Entwicklung Visual Studio

Mitglied: ahstax

ahstax (Level 2) - Jetzt verbinden

30.04.2014, aktualisiert 14:30 Uhr, 2622 Aufrufe, 7 Kommentare, 4 Danke

Hallo,

ich bin dabei ein Programm zu schreiben, mit dem Bilddateien (jpg, bmp, tif, png) "analysiert" und ggf konvertiert werden sollen.
Die Analyse soll unter anderem den Farbraum/das Farbmodell (RGB, CMYK, YCbCr, ggf weitere) umfassen, der/das bei dem Bild angewendet ist.

Mit
01.
strPixelFormat = imgBild.PixelFormat
erhalte ich zwar einen Wert (bsp "Format24bppRgb {137224}"), der ist aber interessanterweise(?) bei Bildern aus dem Farbraum RGB und YCbCr gleich.

Kann mir bitte jemand sagen, wie ich zuverlässig und eindeutig den verwendeten Farbraum eines Bildes herausfinde?

Neugierige Grüße,
Andreas
Mitglied: ahstax
30.04.2014 um 12:39 Uhr
Gar nicht schlecht, vielen Dank!!! :D
Bitte warten ..
Mitglied: colinardo
30.04.2014, aktualisiert um 12:45 Uhr
Falls du es in VB.Net benötigst:

01.
Imports System.Drawing.Imaging 
02.
 
03.
    Public Enum ImageColorFormat 
04.
        Rgb 
05.
        Cmyk 
06.
        Indexed 
07.
        Grayscale 
08.
    End Enum 
09.
 
10.
    Function GetImageColorFormat(bm As Bitmap) As ImageColorFormat 
11.
        Const pixelFormat32bppCMYK As Integer = &H200F 
12.
        Dim flags As ImageFlags = bm.Flags 
13.
 
14.
        If flags.HasFlag(ImageFlags.ColorSpaceCmyk) Or flags.HasFlag(ImageFlags.ColorSpaceYcck) Then 
15.
            Return ImageColorFormat.Cmyk 
16.
        ElseIf flags.HasFlag(ImageFlags.ColorSpaceGray) Then 
17.
            Return ImageColorFormat.Grayscale 
18.
        End If 
19.
 
20.
        Select Case bm.PixelFormat 
21.
            Case pixelFormat32bppCMYK 
22.
                Return ImageColorFormat.Cmyk 
23.
            Case PixelFormat.Format16bppGrayScale 
24.
                Return ImageColorFormat.Grayscale 
25.
            Case PixelFormat.Indexed 
26.
                Return ImageColorFormat.Indexed 
27.
        End Select 
28.
 
29.
        'default is rgb 
30.
        Return ImageColorFormat.Rgb 
31.
    End Function
Grüße Uwe
Bitte warten ..
Mitglied: ahstax
30.04.2014, aktualisiert um 13:34 Uhr
Hallo Uwe,
hallo miteinander,

vielen Dank für Deine Übersetzung. Ich hatte ein sehr ähnliches Ergebnis hier erhalten.

Woran könnte es denn liegen, dass der Farbraum YcbcrK (Ycck) als CMYK und der Farbraum Ycbcr als RGB (trotz der Anpassungen, s.u.) erkennt wird?

01.
 Public Enum ImageColorFormat 
02.
        Rgb 
03.
        Cmyk 
04.
        YccK 
05.
        Ycbcr 
06.
        Indexed 
07.
        Grayscale 
08.
    End Enum 
09.
 
10.
 
11.
    Public Function GetColorFormat(ByVal BM As Bitmap) As ImageColorFormat 
12.
        Const pixelFormatIndexed As Integer = 65536 
13.
        Const pixelFormat32bppCMYK As Integer = 8207 
14.
        Const pixelFormat16bppGrayScale As Integer = (4 Or (16 + 8)) 
15.
        ' Check image flags 
16.
        Dim flags = CType(BM.Flags, ImageFlags) 
17.
        If flags.HasFlag(ImageFlags.ColorSpaceCmyk) Then 
18.
            Return ImageColorFormat.Cmyk 
19.
        ElseIf flags.HasFlag(ImageFlags.ColorSpaceYcck) Then 
20.
            Return ImageColorFormat.YccK 
21.
        ElseIf flags.HasFlag(ImageFlags.ColorSpaceYcbcr) Then 
22.
            Return ImageColorFormat.Ycbcr 
23.
        ElseIf flags.HasFlag(ImageFlags.ColorSpaceGray) Then 
24.
            Return ImageColorFormat.Grayscale 
25.
        End If 
26.
        ' Check pixel format 
27.
        Dim pixelFormat = CType(BM.PixelFormat, Integer) 
28.
        If (pixelFormat = pixelFormat32bppCMYK) Then 
29.
            Return ImageColorFormat.Cmyk 
30.
        ElseIf ((pixelFormat And pixelFormatIndexed) <> 0) Then 
31.
            Return ImageColorFormat.Indexed 
32.
        ElseIf (pixelFormat = pixelFormat16bppGrayScale) Then 
33.
            Return ImageColorFormat.Grayscale 
34.
        End If 
35.
        ' Default to RGB 
36.
        Return ImageColorFormat.Rgb 
37.
    End Function
Bitte warten ..
Mitglied: colinardo
30.04.2014, aktualisiert um 14:32 Uhr
ohne dein Bild jetzt hier zu haben mit dem du testest, kommentiere mal Zeile 36 aus, dann kannst du prüfen ob überhaupt eine der Bedingung für dein Bild zutrifft...sollte dann nichts zurückgeben bzw. eine Exception auswerfen.
Bitte warten ..
Mitglied: ahstax
30.04.2014 um 14:42 Uhr
Wenn ich das Ycbcr-Bild im Debug mit Einzelschritten durchlaufen lasse, ist in "flags" der Wert
"ImageFlags.ColorSpaceRgb Or ImageFlags.HasRealDpi Or ImageFlags.HasRealPixelSize Or ImageFlags.ReadOnly"
und beim pixelFormat
"137224" (=RGB)

Beim YcbcrK-Bild den Wert
"ImageFlags.ColorSpaceRgb Or ImageFlags.HasRealPixelSize Or ImageFlags.ReadOnly"
und beim pixelFormat
"8207" (=CMYK)

Die auskommentierte Zeile 36 bringt keinen Fehler bzw den Wert "0"
Aufgerufen wird die Funktion bei mir mit
01.
Dim imgBild As Image 
02.
 fsOriginalBild = IO.File.OpenRead(PfadBildDatei) 
03.
 imgBild = Image.FromStream(fsOriginalBild) 
04.
 MsgBox(GetColorFormat(imgBild))
Die fraglichen Bilddateien habe ich mit dem FastStone Imageviewer erstellt. Darin wird mir auch angezeigt, was ich eingestellt hatte. Kann ich irgendwie prüfen, ob die Einstellungen von FastStone tatsächlich den gewünschten entsprechen?
Bitte warten ..
Mitglied: colinardo
30.04.2014, aktualisiert um 14:48 Uhr
mach mal aus Zeile 04:
MsgBox(GetColorFormat(imgBild).toString())
dann wird dir das Format anstatt als Integer des Enums als String angezeigt.

Kann ich irgendwie prüfen, ob die Einstellungen von FastStone tatsächlich den gewünschten entsprechen?
Noch einen anderen Image-Viewer zur Kontrolle benutzen (z.B. Irfanview).
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Erkennung und -Abwehr
Lokale Virenprüfstation : Windows 10: Ändern von Einstellungen verhinden (5)

Frage von TryAndSolve zum Thema Erkennung und -Abwehr ...

Windows Server
gelöst Word 2010 : Absatz - Abstand per GPO ändern (3)

Frage von johanna-p zum Thema Windows Server ...

Exchange Server
Exchange 2013, Outlook 2010 Standard-Absendeadresse ändern (4)

Frage von ingoue zum Thema Exchange Server ...

E-Mail
gelöst GMail: Anzeige der Mailübersicht ändern (7)

Frage von honeybee zum Thema E-Mail ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...