2012-11-29 15 views
9

संभव डुप्लिकेट एक छवि कट:
Image splitting into 9 pieces9 टुकड़ों में सी #

हालांकि मैं काफी googled लेकिन दुर्भाग्य से एक मदद खोजने में असफल रहा। यह Code Project Tutorial मुझे वास्तव में मेरी सेवा करने में असफल रहा।

मेरे पास एक WinForm में एक छवि और 9 पिक्चरबॉक्स हैं।

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; 

यहाँ आप के लिए एक उदाहरण छवि है:

enter image description here

यह मेरा चित्र पहेली वर्ग परियोजना का एक हिस्सा है। मैंने फ़ोटोशॉप छवियों के साथ किया है, अब गतिशील रूप से कटौती करना चाहते हैं।

अग्रिम धन्यवाद।

उत्तर

13

पहले, img1, img2 उपयोग करने के बजाय ... तो यह इस तरह छोरों की एक जोड़ी का उपयोग कर यह करने के लिए बहुत आसान है 9. का एक आकार के साथ एक सरणी का उपयोग करें: आप कर सकते हैं तो फिर

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

इस तरह अपने बक्से भरें:

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

आप इस कोड के साथ प्रयास कर सकते हैं। यह मूल रूप से छवियों का एक मैट्रिक्स बनाता है (जैसे आपको अपनी परियोजना में आवश्यकता है) और बड़ी छवि के प्रत्येक Bitmap पर्याप्त भाग पर आकर्षित करता है। उसी अवधारणा का उपयोग आप pictureBoxes के लिए कर सकते हैं और उन्हें मैट्रिक्स में डाल सकते हैं।

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]; 
संबंधित मुद्दे