DarioSantarelli.Blog("UgiDotNet");

<sharing mode=”On” users=”*” />
posts - 176, comments - 105, trackbacks - 3

My Links

News


This is my personal blog. These postings are provided "AS IS" with no warranties, and confer no rights.




Tag Cloud

Archives

Post Categories

My English Blog

[WPF] Creare un ColorPicker

In generale, una semplice soluzione per realizzare un ColorPicker si basa sull'utilizzo di un' immagine che rappresenta lo spettro dei colori, come la seguente:

Dopodiché, per rilevare il colore selezionato al passaggio del Mouse abbiamo ovviamente bisogno di conoscere le coordinate del cursore su tale immagine.

In WPF questa operazione è veramente molto semplice sfruttando la classe CroppedBitmap.
Se definissimo una BitmapSource come Source della nostra Image WPF, ecco come potremmo implementare un semplice metodo per individuare il colore RGB corrispondente alle coordinate del cursore (MouseX,MouseY) su tale immagine-spettro: 

using System.Windows.Media.Imaging;

...

public System.Windows.Media.Color GetSelectedColor(BitmapSource bitmapSource, int MouseX, int MouseY)
{           
 
CroppedBitmap cb = new CroppedBitmap(bitmapSource, new Int32Rect(MouseX, MouseY, 1, 1)); // CroppedBitmap di 1px X 1px
  rgbChannels
= new byte[4];
 
cb.CopyPixels(rgbChannels, 4, 0); // 4 è la dimensione minima specificabile per individuare il colore RGB
 
return System.Windows.Media.Color.FromRgb(rgbChannels[2], rgbChannels[1], rgbChannels[0]);  // R,G,B                         
}

Un esempio di Colorpicker WPF stupidissimo sviluppato con questa tecnica potebbe essere il seguente:



P.S.: Se la nostra Bitmap provenisse dal mondo GDI+ ( System.Drawing.Bitmap ), avremmo bisogno di una conversione in BitmapSource (WPF). A riguardo, riporto un metodo che effettua tale conversione tramite il BREVISSIMO metodo CreateBitmapSourceFromHBitmap di System.Windows.Interop.Imaging:

private BitmapSource GetBitmapSource(System.Drawing.Bitmap source)
{
 
return System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(source.GetHbitmap(),IntPtr.Zero,Int32Rect.Empty, 
                                                                                                                                
System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
}

Technorati Tag:

Print | posted on venerdì 5 dicembre 2008 21:59 | Filed Under [ WPF ]

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET