這篇文章主要介紹C#如何實(shí)現(xiàn)圖片切割、切圖、裁剪,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
創(chuàng)新互聯(lián)公司專業(yè)IDC數(shù)據(jù)服務(wù)器托管提供商,專業(yè)提供成都服務(wù)器托管,服務(wù)器租用,西部信息服務(wù)器租用,西部信息服務(wù)器租用,成都多線服務(wù)器托管等服務(wù)器托管服務(wù)。具體內(nèi)容如下
前臺(tái)準(zhǔn)備兩個(gè)Image控件。上面是顯示原圖,下面顯示切割后的效果。
對(duì)應(yīng)的后臺(tái)代碼:
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); // 設(shè)置原圖 img.Source = new BitmapImage(new Uri(@"Images/1.jpg", UriKind.Relative)); // 切割圖片 ImageSource imageSource = img.Source; Bitmap bitmap = SystemUtils.ImageSourceToBitmap(imageSource); BitmapSource bitmapSource = SystemUtils.BitmapToBitmapImage(bitmap); BitmapSource newBitmapSource = SystemUtils.CutImage(bitmapSource, new Int32Rect(125, 60, 235, 285)); // 使用切割后的圖源 img.Source = newBitmapSource; } } // 圖像工具類 public static class SystemUtils { ////// 切圖 /// /// 圖源 /// 切割區(qū)域 ///public static BitmapSource CutImage(BitmapSource bitmapSource, Int32Rect cut) { //計(jì)算Stride var stride = bitmapSource.Format.BitsPerPixel * cut.Width / 8; //聲明字節(jié)數(shù)組 byte[] data = new byte[cut.Height * stride]; //調(diào)用CopyPixels bitmapSource.CopyPixels(cut, data, stride, 0); return BitmapSource.Create(cut.Width, cut.Height, 0, 0, PixelFormats.Bgr32, null, data, stride); } // ImageSource --> Bitmap public static System.Drawing.Bitmap ImageSourceToBitmap(ImageSource imageSource) { BitmapSource m = (BitmapSource)imageSource; System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(m.PixelWidth, m.PixelHeight, System.Drawing.Imaging.PixelFormat.Format32bppPArgb); System.Drawing.Imaging.BitmapData data = bmp.LockBits( new System.Drawing.Rectangle(System.Drawing.Point.Empty, bmp.Size), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppPArgb); m.CopyPixels(Int32Rect.Empty, data.Scan0, data.Height * data.Stride, data.Stride); bmp.UnlockBits(data); return bmp; } // Bitmap --> BitmapImage public static BitmapImage BitmapToBitmapImage(Bitmap bitmap) { using (MemoryStream stream = new MemoryStream()) { bitmap.Save(stream, ImageFormat.Bmp); stream.Position = 0; BitmapImage result = new BitmapImage(); result.BeginInit(); // According to MSDN, "The default OnDemand cache option retains access to the stream until the image is needed." // Force the bitmap to load right now so we can dispose the stream. result.CacheOption = BitmapCacheOption.OnLoad; result.StreamSource = stream; result.EndInit(); result.Freeze(); return result; } } }
運(yùn)行后的效果如下:
補(bǔ)充:關(guān)于剪裁的位置和區(qū)域的填寫(xiě)說(shuō)明,如下圖。
C#是一個(gè)簡(jiǎn)單、通用、面向?qū)ο蟮木幊陶Z(yǔ)言,它由微軟Microsoft開(kāi)發(fā),繼承了C和C++強(qiáng)大功能,并且去掉了一些它們的復(fù)雜特性,C#綜合了VB簡(jiǎn)單的可視化操作和C++的高運(yùn)行效率,以其強(qiáng)大的操作能力、優(yōu)雅的語(yǔ)法風(fēng)格、創(chuàng)新的語(yǔ)言特性和便捷的面向組件編程從而成為.NET開(kāi)發(fā)的選語(yǔ)言,但它不適用于編寫(xiě)時(shí)間急迫或性能非常高的代碼,因?yàn)镃#缺乏性能極高的應(yīng)用程序所需要的關(guān)鍵功能。
以上是“C#如何實(shí)現(xiàn)圖片切割、切圖、裁剪”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。