2009-11-12 18 views
27

Devo creare una bitmap a 24 bit (risoluzione 100x100 pixel) utilizzando un colore RGB univoco e salvare l'immagine generata sul disco. Attualmente utilizzo la funzione SetPixel, ma è estremamente lenta.Come si riempie una bitmap con un colore solido?

Bitmap Bmp = new Bitmap(width, height); 
//... 
//... 
Bmp.SetPixel(x,y,Color.FromARGB(redvalue, greenvalue, bluevalue)); 

Esiste un metodo più veloce di SetPixel? Grazie in anticipo.

risposta

40

Questo dovrebbe fare ciò che ti serve. Riempirà l'intera bitmap con il colore specificato.

Bitmap Bmp = new Bitmap(width, height); 
using (Graphics gfx = Graphics.FromImage(Bmp)) 
using (SolidBrush brush = new SolidBrush(Color.FromArgb(redvalue, greenvalue, bluevalue))) 
{ 
    gfx.FillRectangle(brush, 0, 0, width, height); 
} 
+0

Grazie mille. – Salvador

+0

Questo mostra come creare una bitmap da un'altra bitmap. –

+2

@SanuelJackson Quindi hai downvoted questa risposta perché risponde alla domanda effettiva dei PO piuttosto che al titolo della sua domanda? –

6

Dipende da ciò che si sta cercando di realizzare, ma di solito si dovrebbe utilizzare GDI + per ottenere un oggetto grafico e quindi il disegno ad esso:

Graphics g = Graphics.FromImage(bitmap); 

Il suo in realtà un grande soggetto, ecco alcuni tutorial per principianti: GDI+ Tutorials

Ecco un frammento del tutorial sul disegno di un rettangolo con un riempimento sfumato.

Rectangle rect = new Rectangle(50, 30, 100, 100); 
LinearGradientBrush lBrush = new LinearGradientBrush(rect, Color.Red, Color.Yellow, LinearGradientMode.BackwardDiagonal); 
g.FillRectangle(lBrush, rect); 
+0

+1 per GDI + suggerimento. – Salvador

3

Si potrebbe utilizzare LockBits per velocizzare la scrittura dei pixel (accesso puntatore invece di chiamata di metodo per pixel).

2

Lavorare sempre con regioni (rettangolo) è molto più veloce rispetto all'utilizzo di singoli pixel.

7
Bitmap bmp = new Bitmap(width, height); 
Graphics g = Graphics.FromImage(bmp); 
g.Clear(Color.Green); 
+0

Potresti fornirci maggiori dettagli relativi alla tua risposta. Grazie – Robert

+0

Questa è la migliore risposta qui. Nella mia esperienza 'Clear' è più veloce di chiamare' FillRectangle' quando stai cancellando l'intera immagine. –

+0

Graphics _ ** clear ** _ metodo cancella l'intera superficie del disegno e la riempie con il colore di sfondo specificato. Non è necessario riempirlo manualmente, questa è un'opzione che il metodo _ ** clear ** _ ha. cercare la spiegazione [msdn] (https://msdn.microsoft.com/en-us/library/system.drawing.graphics.clear (v = vs.110) .aspx). –

0

Creazione dell'oggetto bitmap bmp di Dimensioni s (altezza, larghezza) e Colore c.

bmp=CreateBmp(c , s); 

metodo Ora CreateBmp che restituisce bitmap:

Bitmap CreateBmp(Color c, Size s) 
{ 
    Bitmap temp =new Bitmap(1,1); 
    temp.SetPixel(1,1,c); 
    return new Bitmap(temp, s); 
} 
Problemi correlati