Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将图像切割成9块并控制宽度和高度?_C# - Fatal编程技术网

C# 如何将图像切割成9块并控制宽度和高度?

C# 如何将图像切割成9块并控制宽度和高度?,c#,C#,嗨,伙计们,我在这段代码中有问题,我想显示我的照片切成9块,并显示在9个图片框中,使益智游戏希望任何人都能帮助。 提前谢谢 var knight = new Image[9]; var H = Image.FromFile("1425435_630471227004342_2061223205_o.jpg"); for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { var index =

嗨,伙计们,我在这段代码中有问题,我想显示我的照片切成9块,并显示在9个图片框中,使益智游戏希望任何人都能帮助。 提前谢谢

var knight = new Image[9];
var H = Image.FromFile("1425435_630471227004342_2061223205_o.jpg");
for (int i = 0; i < 3; i++)
 {
    for (int j = 0; j < 3; j++)
    {

      var index = i * 3 + j;
      knight[index] = new Bitmap(200,200);
      var m = Graphics.FromImage(knight[index]);
      Rectangle r = new Rectangle( i * (knight[index].Width / 3),
                                   j*(knight[index].Height / 3), 
                                   knight[index].Width / 3, 
                                   knight[index].Height / 3);
      m.DrawImage(H, r, r, GraphicsUnit.Pixel);

      m.Dispose();
    }
 }
 pictureBox1.Image = knight[0];
 pictureBox2.Image = knight[1];
 pictureBox3.Image = knight[2];
 pictureBox4.Image = knight[3];
 pictureBox5.Image = knight[4];
 pictureBox6.Image = knight[5];
 pictureBox7.Image = knight[6];
 pictureBox8.Image = knight[7];
 pictureBox9.Image = knight[8];
改变这个

  Rectangle r = new Rectangle( i * (knight[index].Width / 3),
                               j*(knight[index].Height / 3), 
                               knight[index].Width / 3, 
                               knight[index].Height / 3);
  m.DrawImage(H, r, r, GraphicsUnit.Pixel);
为此:

  out of the loop:
  // old size of the parts:
  int ow = H.Width / 3;
  int oh = H.Height / 3;

  // new size of the parts:
  int nw = knight[0].Width;
  int nh = knight[0].Height;

  // inner loop:
  Rectangle rDest   = new Rectangle(0, 0, nw, nh);
  Rectangle rSource = new Rectangle(i * ow, j * oh, ow, oh);

  m.DrawImage(H, rDest, rSource , GraphicsUnit.Pixel);
注意:如果原始图像和9个PBs的比例不同,则会出现失真:


您没有使用TaW提到的单独的源矩形。此外,您还没有完全占用picturebox

请尝试以下代码:

knight[index] = new Bitmap(640, 360); //enter the size of the original image

Rectangle src = new Rectangle(i * (knight[index].Width / 3), j * (knight[index].Height / 3), knight[index].Width / 3, knight[index].Height / 3);
Rectangle des = new Rectangle(0, 0, knight[index].Width, knight[index].Height);
m.DrawImage(H, des, src, GraphicsUnit.Pixel);

你的代码有什么特别的问题?没有根据需要剪切照片在宽度和高度上有问题,如果我把它们放在一起,就要把它们剪成9块,得到主照片@Cyral你能展示一个发生了什么错误的可视化例子吗?一定要查找以下参数:H、rDestination、rSource、GraphicsUnit.Pixel;rDestination应该是新的矩形0,0,w,hy如果你想在新位图的左上角绘制,那么x和y必须是0。现在它显示6张图3小3大,不显示完整的photoknight是你的数组。矩形的代码应该进入内部循环!宽度和高度只需设置一次。请注意,我在他们的代码中有一个错误,现在请查看已更正的代码!哎呀,不是我!原始图像!我把它做成int-ow=knight[j].Width/3;int oh=骑士[j].身高/3;它只显示了我想要的照片的左侧,但它没有显示所有的照片。请不要把我的代码改成旧错误!按照上次修改后我写的那样做!如果PictureBox的订购方式正确,现在已测试其工作。。