Entwickler-Ecke

WPF / Silverlight - GetPixel Image-/BitmapSource


danielf - Di 15.12.09 08:59
Titel: GetPixel Image-/BitmapSource
Hallo,

in der Bitmap-Klasse von System.Drawing gibt es eine Methode GetPixel(x,y). Gibt es eine solche Funktion auch für das WPF-Pendant?

Gefunden habe ich die zwei Varianten GetPixel als System-Aufruf (über eine gdi3.DLL http://www.codeproject.com/KB/WPF/SimpleColorPickerControl.aspx) oder den Raw-Datenstrom zu nehmen und daraus wiederum einen Farbwert zu generieren (http://blogs.microsoft.co.il/blogs/tomershamam/archive/2007/09/21/wpf-image-processing.aspx).

Nun ja.. nicht die schönsten Möglichkeiten... Alternativen???

mfg Daniel


danielf - Di 15.12.09 10:57

Okay ich habe nochmal gesucht und eine Implementierung für die zweite Variante gefunden. Werde dies nun vorerst nehmen.
http://69.10.233.10/KB/WPF/ImageColorPicker.aspx?display=Print

Es existiert auch eine dritte Möglichkeit: Ein neues Bild mit genau dem Pixel generieren und dann diesen Wert in ein Color umwandeln.

Also das Angebot, eine "schöne" Lösung hier hinzuzufügen, steht noch :)

Gruß Daniel


Kha - Di 15.12.09 16:40

WriteableBitmap [http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.writeablebitmap.aspx] ;) .


danielf - Di 15.12.09 16:46

Was kann die Klasse was ich bräuchte?

Will doch nur den Farbwert eines Pixels bestimmen... (Lesen nicht schreiben)


Kha - Di 15.12.09 17:59

Oh, BitmapSource kennt ebenfalls schon CopyPixels :oops: ? Da dein zweiter Link einen etwas komplizierteren Weg gewählt hat, bin ich vom Gegenteil ausgegangen.
WriteableBitmap bietet gegenüber CopyPixels einen direkten Pointer auf die Daten an, was beim Lesen aber wahrscheinlich keinen großen Unterschied machen dürfte. Ich würde mich explizit auf 32-Bit-Bitmaps festlegen und dann entsprechende Extension Methods/eine eigene kleine Wrapper-Klasse schreiben.