2012-11-29 6 views
9

Mögliche Duplizieren:
Image splitting into 9 piecesSchneiden Sie ein Bild in 9 Stücke C#

Obwohl ich genug gegoogelt aber leider versäumt eine Hilfe zu finden. Diese Code Project Tutorial versagte mir auch, was ich eigentlich brauche.

Ich habe ein Bild und 9 PictureBox (s) in einem WinForm.

Image img = Image.FromFile("media\\a.png"); // a.png has 312X312 width and height 
//   some code help, to get 
//   img1, img2, img3, img4, img5, img6, img7, img8, img9 
//   having equal width and height 
//   then... 
pictureBox1.Image = img1; 
pictureBox2.Image = img2; 
pictureBox3.Image = img3; 
pictureBox4.Image = img4; 
pictureBox5.Image = img5; 
pictureBox6.Image = img6; 
pictureBox7.Image = img7; 
pictureBox8.Image = img8; 
pictureBox9.Image = img9; 

Hier ist ein Beispiel Bild für Sie:

enter image description here

Dies ist ein Teil meines Picture Puzzle Klasse-Projekt ist. Ich habe mit Photoshop Bilder gemacht, jetzt möchte ich dynamisch schneiden.

Vielen Dank im Voraus.

Antwort

13

Zunächst einmal, statt img1, img2 der Verwendung ... ein Array mit einer Größe von 9. Verwenden Sie dann viel einfacher, es ist so dies mit ein paar Schleifen zu tun:

var imgarray = new Image[9]; 
var img = Image.FromFile("media\\a.png"); 
for(int i = 0; i < 3; i++){ 
    for(int j = 0; j < 3; j++){ 
    var index = i*3+j; 
    imgarray[index] = new Bitmap(104,104); 
    var graphics = Graphics.FromImage(imgarray[index]); 
    graphics.DrawImage(img, new Rectangle(0,0,104,104), new Rectangle(i*104, j*104,104,104), GraphicsUnit.Pixel); 
    graphics.Dispose(); 
    } 
} 

Dann können Sie Füllen Sie Ihre Felder wie folgt:

pictureBox1.Image = imgarray[0]; 
pictureBox2.Image = imgarray[1]; 
... 
7

Sie könnten mit diesem Code versuchen. Es erstellt im Grunde eine Matrix von Bildern (wie Sie in Ihrem Projekt benötigen) und bezieht sich auf jeden Teil des großen Bildes. Das gleiche Konzept könnte man für die pictureBoxes verwenden und in die Matrix einfügen.

Image img = Image.FromFile("media\\a.png"); // a.png has 312X312 width and height 
int widthThird = (int)((double)img.Width/3.0 + 0.5); 
int heightThird = (int)((double)img.Height/3.0 + 0.5); 
Bitmap[,] bmps = new Bitmap[3,3]; 
for (int i = 0; i < 3; i++) 
    for (int j = 0; j < 3; j++) 
    { 
     bmps[i, j] = new Bitmap(widthThird, heightThird); 
     Graphics g = Graphics.FromImage(bmps[i, j]); 
     g.DrawImage(img, new Rectangle(0, 0, widthThird, heightThird), new Rectangle(j * widthThird, i * heightThird, widthThird, heightThird), GraphicsUnit.Pixel); 
     g.Dispose(); 
    } 
pictureBox1.Image = bmps[0, 0]; 
pictureBox2.Image = bmps[0, 1]; 
pictureBox3.Image = bmps[0, 2]; 
pictureBox4.Image = bmps[1, 0]; 
pictureBox5.Image = bmps[1, 1]; 
pictureBox6.Image = bmps[1, 2]; 
pictureBox7.Image = bmps[2, 0]; 
pictureBox8.Image = bmps[2, 1]; 
pictureBox9.Image = bmps[2, 2];