|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jul 2008
Messaggi: 86
|
[C#] Colori RGB
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... Grazie, Zarko.
__________________
XFX 780i - Zotac GTX470 + XFX 8800GTS 512Mb - 2x Patriot Viper 2Gb SLI-Ready - Q9300 @ 3.2GHz - Triton 88 - SuperFlower 700W I computer sono stupidi, se vuoi convivere con loro impara a dirgli cosa fare. |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Dec 2008
Messaggi: 82
|
usa la Color.FromArgb
Brush mybrush = new Pen(Color.FromArgb(100, 255, 255, 255)).Brush;
__________________
Software house Manfriday |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Jul 2008
Messaggi: 237
|
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):
Codice:
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;
}
Non scordarti che Image eredita da IDisposable quindi quando hai finito di usare l'immagine devi chiamare il metodo Dispose sull'oggetto. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:37.



















