c#圖片處理之圖片裁剪成不規(guī)則圖形
為了讓大家知道下面內(nèi)容是否是自己想要的,我先發(fā)效果圖。
好了,那就開始貼代碼了
以下為一個(gè)按鈕的事件,為裁剪準(zhǔn)備圖片、裁剪路徑、保存路徑
private void button1_Click(object sender, EventArgs e)
{
GraphicsPath path = new GraphicsPath();
Point[] p = {
new Point(424,244),
new Point(240,440),
new Point(340,552),
new Point(550,526),
new Point(478,366),
new Point(348,660),
new Point(424,244)
};
path.AddLines(p);
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = @"Bitmap文件(*.bmp)|*.bmp|Jpeg文件(*.jpg)|*.jpg|所有合適文件(*.bmp,*.jpg)|*.bmp;*.jpg";
openFileDialog.FilterIndex = 3;
openFileDialog.RestoreDirectory = true;
if (DialogResult.OK == openFileDialog.ShowDialog())
{
Bitmap bit = (Bitmap)Bitmap.FromFile(openFileDialog.FileName, false);
Bitmap newBit = null;
BitmapCrop(bit, path, out newBit);
newBit.Save(@"C:\Users\Public\Pictures\Sample Pictures\沙漠22.jpg");
}
}
以下為裁剪的關(guān)鍵代碼
/// <summary>
/// 圖片截圖
/// </summary>
/// <param name="bitmap">原圖</param>
/// <param name="path">裁剪路徑</param>
/// <param name="outputBitmap">輸出圖</param>
/// <returns></returns>
public static Bitmap BitmapCrop(Bitmap bitmap, GraphicsPath path, out Bitmap outputBitmap)
{
RectangleF rect = path.GetBounds();
int left = (int)rect.Left;
int top = (int)rect.Top;
int width = (int)rect.Width;
int height = (int)rect.Height;
Bitmap image = (Bitmap)bitmap.Clone();
outputBitmap = new Bitmap(width, height);
for (int i = left; i < left + width; i++)
{
for (int j = top; j < top + height; j++)
{
//判斷坐標(biāo)是否在路徑中
if (path.IsVisible(i, j))
{
//復(fù)制原圖區(qū)域的像素到輸出圖片
outputBitmap.SetPixel(i - left, j - top, image.GetPixel(i, j));
//設(shè)置原圖這部分區(qū)域?yàn)橥该?nbsp;
image.SetPixel(i, j, Color.FromArgb(0, image.GetPixel(i, j)));
}
else
{
outputBitmap.SetPixel(i - left, j - top, Color.FromArgb(0, 255, 255, 255));
}
}
}
bitmap.Dispose();
return image;
}
有了這個(gè)前臺(tái)只需要獲取用戶的鼠標(biāo)路徑傳到后臺(tái)就可以。
- c# 通過代碼開啟或關(guān)閉防火墻
- c# 防火墻添加/刪除 特定端口的示例
- C#用遞歸算法實(shí)現(xiàn):一列數(shù)的規(guī)則如下: 1、1、2、3、5、8、13、21、34,求第30位數(shù)是多少
- C#創(chuàng)建不規(guī)則窗體的4種方式詳解
- C#常用的命名規(guī)則匯總
- c#棧變化規(guī)則圖解示例(棧的生長(zhǎng)與消亡)
- 正則表達(dá)式語法規(guī)則及在Javascript和C#中的使用方法
- c# 給button添加不規(guī)則的圖片以及用pictureBox替代button響應(yīng)點(diǎn)擊事件的方法
- C# 命名規(guī)則(挺不錯(cuò)的)
- C# 設(shè)置防火墻的創(chuàng)建規(guī)則
相關(guān)文章
UnityShader3實(shí)現(xiàn)2D描邊效果
這篇文章主要為大家詳細(xì)介紹了UnityShader3實(shí)現(xiàn)2D描邊效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02使用C#實(shí)現(xiàn)基于TCP和UDP協(xié)議的網(wǎng)絡(luò)通信程序的基本示例
這篇文章主要介紹了使用C#實(shí)現(xiàn)基于TCP和UDP協(xié)議的網(wǎng)絡(luò)通信程序的示例,文中分別編寫了基本的服務(wù)器端和客戶端,代碼十分簡(jiǎn)單,需要的朋友可以參考下2016-04-04