C# WINFROM 中一些圖檔操作

紀錄一下使用 C# 去寫 WINFORM 時所用的一些圖檔操作

首先是選擇檔案

1
//開啟檔案的類別
2
OpenFileDialog ofd = new OpenFileDialog();
3
//預設開起的路徑
4
ofd.InitialDirectory = @"D:\SCAN";
5
//預設可以開啟的副檔名
6
ofd.Filter = "(*.jpg,*.png,*.jpeg,*.bmp,*.gif,*.tif)|*.jpg;*.png;*.jpeg;*.bmp;*.gif;*.tif";

控制圖檔大小

1
//要記得等比例縮放
2
private Bitmap Resize(Bitmap originImage, int image_width, int image_height)
3
{
4
	int width = Convert.ToInt32(600);
5
	int height = (width * image_height) / image_width;
6
	return Process(originImage, originImage.Width, originImage.Height, width, height);
7
}

增加浮水印

1
	int x = 0;
2
	int y = 0;
3
	//浮水印的文字
4
	string sWaterMark = "浮水印";
5
	
6
	//設定文字大小,此處是跟著圖片的寬度去設置文字的大小
7
	int FontSize = (Image.Width) / (sWaterMark.Length * 2);
8
	
9
	//x是浮水印由左往右的位置
10
	x = Convert.ToInt32(Image.Width / 2.8);
11
	
12
	//y是浮水印由下往上的位置
13
	y = Convert.ToInt32((x * image_height) / image_width / 3.9);
14
	
15
	//浮水印的文字所用的格式
16
	StringFormat DrawFormat = new StringFormat();
17
	DrawFormat.Alignment = StringAlignment.Center;
18
	DrawFormat.FormatFlags = StringFormatFlags.NoWrap;
19
	
20
	//把浮水印到圖片上,solidBrush 是設定浮水印的文字顏色
21
	Graphics myGraphic = Graphics.FromImage(Image);
22
	myGraphic.DrawString(sWaterMark, new Font("標楷體", FontSize, FontStyle.Bold), new SolidBrush(Color.FromArgb(255, 255, 0, 0)), x, y, DrawFormat);
23
}

裁切圖片

1
Image img = null;
2
//filename 是圖檔的名稱
3
byte[] MyByte = System.IO.File.ReadAllBytes(filename);
4
using (MemoryStream ms = new MemoryStream(MyByte))
5
{
6
	img = Image.FromStream(ms);
7
}
8
Bitmap bitmap = (Bitmap)img;
9
//sWidth 跟 sHeight 是裁切後的大小
10
Bitmap Mybmp = new Bitmap(sWidth, sHeight);
11
Graphics gr = Graphics.FromImage(Mybmp);
12
gr.Clear(Color.Transparent);
13
把原始圖檔繪製成指定的大小
14
gr.DrawImage(bitmap, new Rectangle(0, 0, Mybmp.Width, Mybmp.Height), 0, 0, sWidth, sHeight, GraphicsUnit.Pixel);
15
}