[C#] 分割圖片
練習製作滑塊拼圖小遊戲,必須用到圖片切割,所以去找了一下其實還蠻簡單的,System.Drawing.Bitmap 就有方法了,此知識來自 StackOverFlow : How to crop an image using C#? 。
using System.IO;
try
{
Image img = Image.FromFile(@"C:\.....\sample.jpg");
Bitmap bmp = (Bitmap)img;
}
catch(FileNotFoundException ex)
{
}
Rectangle rect = new Rectangle(100, 180, 300, 200);
Image result = bmp.Clone(rect, img.PixelFormat);
上面的程式碼就會將 sample.jpg 圖片上 (100, 180) 的位置開始切下寬300、高200的長方形賦予給 result,下為示意圖片:
就會得到黃色矩形的圖片,如下
要如影片切割成多塊來移動,我是用 PictureBox[] ,要注意的是第幾個 row 其實在坐標上有關的是 y 坐標,而第幾個 column 對應的是 x 坐標,另外因為 PictureBox 是另外 new 出來不是手動滑鼠拉的,必須有 Form.Controls.Add() 來讓他出現在視窗上。
using System.IO;
PictureBox[] picBlock = new PictureBox[16];
int blockWidth, blockHeight;
try
{
Image img = Image.FromFile(@"C:\.....\sample.jpg");
Bitmap bmp = (Bitmap)img;
blockWidth = img.Width / 4;
blockHeight = img.Height / 4;
}
catch(FileNotFoundException ex)
{
}
for(int i=0; i<16; i++) // i % 4 會得陣列中 column 位置,可換算 x 坐標
{ // i / 4 會得陣列中 row 位置,可換算 y 坐標
int x = (i % 4) * blockWidth; // 切割小塊圖片的位置
int y = (i / 4) * blockHeight; // 同時也是從sample.jpg什麼位置開始切割
picBlock[i] = new PictureBox();
picBlock[i].SizeMode = PictureBoxSizeMode.AutoSize; // 大小設定成自動縮放
picBlock[i].Location = new Point(x, y);
Rectangle rect = new Rectangle(x, y, blockWidth, blockHeight);
picBlock[i].Image = bmp.Clone(rect, img.PixelFormat);
this.Controls.Add(picBlock[i]); // 此處的 this 指 Form
}
留言
張貼留言