c#從大圖擷取一部分圖片
阿新 • • 發佈:2019-01-05
public static void CaptureImage(string sFromFilePath, string saveFilePath, int width, int height, int spaceX, int spaceY)
{
//載入底圖
Image fromImage = Image.FromFile(sFromFilePath);
int x = 0; //擷取X座標
int y = 0; //擷取Y座標
//原圖寬與生成圖片寬 之差
//當小於0(即原圖寬小於要生成的圖)時,新圖寬度為較小者 即原圖寬度 X座標則為0
//當大於0(即原圖寬大於要生成的圖)時,新圖寬度為設定值 即width X座標則為 sX與spaceX之間較小者
//Y方向同理
int sX = fromImage.Width - width;
int sY = fromImage.Height - height;
if (sX > 0)
{
x = sX > spaceX ? spaceX : sX;
}
else
{
width = fromImage.Width;
}
if (sY > 0)
{
y = sY > spaceY ? spaceY : sY;
}
else
{
height = fromImage.Height;
}
//建立新圖點陣圖
Bitmap bitmap = new Bitmap(width, height);
//建立作圖區域
Graphics graphic = Graphics.FromImage(bitmap);
//擷取原圖相應區域寫入作圖區
graphic.DrawImage(fromImage, 0, 0, new Rectangle(x, y, width, height), GraphicsUnit.Point);
//從作圖區生成新圖
Image saveImage = Image.FromHbitmap(bitmap.GetHbitmap());
//儲存圖象
saveImage.Save(saveFilePath, ImageFormat.Jpeg);
//釋放資源
saveImage.Dispose();
bitmap.Dispose();
graphic.Dispose();
}
{
//載入底圖
Image fromImage = Image.FromFile(sFromFilePath);
int x = 0; //擷取X座標
int y = 0; //擷取Y座標
//原圖寬與生成圖片寬 之差
//當小於0(即原圖寬小於要生成的圖)時,新圖寬度為較小者 即原圖寬度 X座標則為0
//當大於0(即原圖寬大於要生成的圖)時,新圖寬度為設定值 即width X座標則為 sX與spaceX之間較小者
//Y方向同理
int sX = fromImage.Width - width;
int sY = fromImage.Height - height;
if (sX > 0)
{
x = sX > spaceX ? spaceX : sX;
}
else
{
width = fromImage.Width;
}
if (sY > 0)
{
y = sY > spaceY ? spaceY : sY;
}
else
{
height = fromImage.Height;
}
//建立新圖點陣圖
Bitmap bitmap = new Bitmap(width, height);
//建立作圖區域
Graphics graphic = Graphics.FromImage(bitmap);
//擷取原圖相應區域寫入作圖區
graphic.DrawImage(fromImage, 0, 0, new Rectangle(x, y, width, height), GraphicsUnit.Point);
//從作圖區生成新圖
Image saveImage = Image.FromHbitmap(bitmap.GetHbitmap());
//儲存圖象
saveImage.Save(saveFilePath, ImageFormat.Jpeg);
//釋放資源
saveImage.Dispose();
bitmap.Dispose();
graphic.Dispose();
}