2010-04-17 7 views
3

Je veux créer un bitmap de taille 160 * 160 et le scinder en quatre carrés avec chaque carré rempli d'une seule couleur. Comment cela peut-il être fait?Remplissage de bitmap C#

Répondre

3

Vous pouvez essayer quelque chose comme

using (Bitmap b = new Bitmap(160, 160)) 
using (Graphics g = Graphics.FromImage(b)) 
{ 
    g.FillRectangle(new SolidBrush(Color.Blue), 0, 0, 79, 79); 
    g.FillRectangle(new SolidBrush(Color.Red), 79, 0, 159, 79); 
    g.FillRectangle(new SolidBrush(Color.Green), 0, 79, 79, 159); 
    g.FillRectangle(new SolidBrush(Color.Yellow), 79, 79, 159, 159); 
    b.Save(@"c:\test.bmp"); 
} 
+1

Il est éteint par un, Droite et Bas ne sont pas dessinés. Juste divisez par 2. –

+0

Les quatrième et cinquième paramètres de 'FillRectangle' sont la largeur et la hauteur pas 'end-x/y-values', donc il devrait être 80 au lieu de 159. Et comme Hans Passant a dit, 80 au lieu de 79 paramètres x et y. –

8

Juste au cas où quelqu'un a besoin d'une méthode de résolution de ce problème spécifique d'une manière plus générale, j'ai écrit une méthode d'extension, en couleurs et un entier qui indique combien de tuiles il doit séparer dans la direction x et y:

public static void FillImage(this Image img, int div, Color[] colors) 
{ 
    if (img == null) throw new ArgumentNullException(); 
    if (div < 1) throw new ArgumentOutOfRangeException(); 
    if (colors == null) throw new ArgumentNullException(); 
    if (colors.Length < 1) throw new ArgumentException(); 

    int xstep = img.Width/div; 
    int ystep = img.Height/div; 
    List<SolidBrush> brushes = new List<SolidBrush>(); 
    foreach (Color color in colors) 
     brushes.Add(new SolidBrush(color)); 

    using (Graphics g = Graphics.FromImage(img)) 
    { 
     for (int x = 0; x < div; x++) 
      for (int y = 0; y < div; y++) 
       g.FillRectangle(brushes[(y * div + x) % colors.Length], 
        new Rectangle(x * xstep, y * ystep, xstep, ystep)); 
    } 
} 

les quatre carrés, la OP désirés serait produit avec:

new Bitmap(160, 160).FillImage(2, new Color[] 
            { 
             Color.Red, 
             Color.Blue, 
             Color.Green, 
             Color.Yellow 
            });