PDA

View Full Version : [C#] Colori RGB


zarko
19-04-2009, 20:31
Ciao a tutti,
sto creando un programmino che deve leggere un file di immagine come voglio io. Fin qui tutto ok, leggo i bytes con il mio StreamReader... e poi non so come convertirli in colori per l'oggetto System.Drawing.Pen che dovrebbe disegnare l'immagine sul form...
Non posso neppure fare Image.FromFile perchè un unico file contiene diversi dati e devo leggerne solo una parte... In sostanza devo fare questo:
1) Leggere una parte del file (StreamReader?)
1,5) (non è indispensabile) memorizzare i dati in una matrice di bytes.
2)Disegnare l'immagine sul form "traducendo" i bytes in colori RGB e RGBA.

Qualche idea... :help:

Grazie,
Zarko.

FixFixFix
20-04-2009, 15:50
usa la Color.FromArgb

Brush mybrush = new Pen(Color.FromArgb(100, 255, 255, 255)).Brush;

!k-0t1c!
20-04-2009, 22:31
Prima di tutto devi conoscere l'altezza e la larghezza del file immagine che desideri. Poi puoi usare codice di questo genere (C# 3.0 - .NET Framework 3.5 o 3.5 SP1):

private static Bitmap LeggiImmagine(int larghezza, int altezza, int bytesPerColore, string percorso)
{
const int bytes_per_pixel = 4;
var numeroPixels = larghezza * altezza;
var numeroBytes = numeroPixels * bytes_per_pixel;
var arr = new byte[numeroBytes];
using ( var fs = File.OpenRead( percorso ) )
{
if ( fs.Read( arr, 0, numeroBytes ) != numeroBytes )
throw new IOException( "Il file non contiene il numero di bytes previsti" );
}
var img = new Bitmap(larghezza, altezza);
for (int i = 0; i < larghezza; i++)
{
//si suppone che i pixel siano salvati come una serie pixels di linee orizzontali in formato ARGB
var arrIdx = i * bytes_per_pixel;
img.SetPixel(i - (larghezza * i), i / larghezza, Color.FromArgb(arr[arrIdx], arr[arrIdx + 1], arr[arrIdx + 2], arr[arrIdx + 3]));
}
return img;
}


Per il rendering puoi usare un tipico PictureBox...
Non scordarti che Image eredita da IDisposable quindi quando hai finito di usare l'immagine devi chiamare il metodo Dispose sull'oggetto.