web-dev-qa-db-fra.com

Comment remplir une image bitmap avec une couleur unie?

J'ai besoin de créer un bitmap 24 bits (résolution 100x100 pixels) en utilisant une couleur RVB unique et enregistrer l'image générée sur le disque. J'utilise actuellement la fonction SetPixel , mais elle est extrêmement lente.

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

Existe-t-il une méthode plus rapide que SetPixel? Merci d'avance.

36
Salvador

Cela devrait faire ce dont vous avez besoin. Il remplira l'intégralité du bitmap avec la couleur spécifiée.

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);
}
52
Jeromy Irvine
Bitmap bmp = new Bitmap(width, height);
Graphics g = Graphics.FromImage(bmp);
g.Clear(Color.Green);
24
Sam Saarian

Cela dépend de ce que vous essayez d'accomplir, mais vous utiliserez généralement GDI + en obtenant un objet graphique et en le dessinant ensuite:

Graphics g = Graphics.FromImage(bitmap); 

C'est en fait un gros sujet, voici quelques tutoriels pour débutants: GDI + Tutorials

Voici un extrait du didacticiel sur le dessin d'un rectangle avec un remplissage dégradé.

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

Vous pouvez utiliser LockBits pour accélérer l'écriture des pixels (accès au pointeur au lieu de l'appel de méthode par pixel).

3
Gonzalo

toujours travailler avec les régions (rectangle) est beaucoup plus rapide que d'utiliser pixels individuels.

2
Mohamed Abedallah

Vous avez l'embarras du choix ici :-)

Une alternative à l'utilisation de GDI + consiste à utiliser WPF (voir RenderTargetBitmap.Render .)

Voir aussi cette question .

2
Andrew Shepherd

Création d'un objet bitmap bmp de taille s (hauteur, largeur) et de couleur c.

bmp=CreateBmp( c , s );

Maintenant, méthode CreateBmp qui retourne le bitmap:

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

Je suggère de consulter la bibliothèque Gd.

Je suis plutôt certain qu'il existe une bibliothèque c #. http://www.boutell.com/Gd/

0
David