2012-11-29 18 views
9

Eventuali duplicati:
Image splitting into 9 piecesTagliare un'immagine in 9 pezzi C#

Anche se ho cercato su google abbastanza, ma purtroppo riuscito a trovare un aiuto. Anche questo Code Project Tutorial non è riuscito a servirmi di cosa ho realmente bisogno.

Ho un'immagine e 9 PictureBox (s) in un 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; 

Ecco un esempio immagine per voi:

enter image description here

Questa è una parte del mio progetto di classe Puzzle Picture. Ho fatto con le immagini di Photoshop, ora voglio tagliare dinamicamente.

Grazie in anticipo.

risposta

13

Prima di tutto, invece di utilizzare img1, img2 ... utilizzare un array di dimensioni pari a 9. Poi è molto più facile per fare questo usando un paio di cicli in questo modo:

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(); 
    } 
} 

allora si può riempire le caselle in questo modo:

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

Si potrebbe provare con questo codice. Fondamentalmente crea una matrice di immagini (come quella di cui hai bisogno nel tuo progetto) e disegna su ciascuna porzione adeguata della grande immagine Bitmap. Lo stesso concetto che è possibile utilizzare per lo pictureBoxes e inserirli nella matrice.

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];