.Net Winform 實現(xiàn)CSS3.0 潑墨畫效果(示例代碼)
效果圖
代碼
private unsafe void BlendImages1(Bitmap img1, Bitmap img2) { // 確定兩個圖像的重疊區(qū)域 Rectangle rect = new Rectangle(0, 0, Math.Min(img1.Width, img2.Width), Math.Min(img1.Height, img2.Height)); // 創(chuàng)建輸出圖像,尺寸為重疊區(qū)域大小 Bitmap blendedImage = new Bitmap(rect.Width, rect.Height, PixelFormat.Format32bppArgb); // Lock the bits of each image and get the BitmapData. BitmapData data1 = img1.LockBits(rect, ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); BitmapData data2 = img2.LockBits(rect, ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); BitmapData dataBlended = blendedImage.LockBits(rect, ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb); int bytesPerPixel = 4; // For Format32bppArgb int stride1 = data1.Stride; int stride2 = data2.Stride; int strideBlended = dataBlended.Stride; byte* ptr1 = (byte*)data1.Scan0.ToPointer(); byte* ptr2 = (byte*)data2.Scan0.ToPointer(); byte* ptrBlended = (byte*)dataBlended.Scan0.ToPointer(); for (int y = 0; y < rect.Height; ++y) { byte* rowPtr1 = ptr1 + y * stride1; byte* rowPtr2 = ptr2 + y * stride2; byte* rowPtrBlended = ptrBlended + y * strideBlended; for (int x = 0; x < rect.Width; ++x) { int pixelOffset = x * bytesPerPixel; if (pixelOffset + bytesPerPixel <= Math.Abs(stride1) && pixelOffset + bytesPerPixel <= Math.Abs(stride2) && pixelOffset + bytesPerPixel <= Math.Abs(strideBlended)) { rowPtrBlended[pixelOffset] = (byte)(255 - ((255 - rowPtr1[pixelOffset]) * (255 - rowPtr2[pixelOffset]) >> 8)); // B rowPtrBlended[pixelOffset + 1] = (byte)(255 - ((255 - rowPtr1[pixelOffset + 1]) * (255 - rowPtr2[pixelOffset + 1]) >> 8)); // G rowPtrBlended[pixelOffset + 2] = (byte)(255 - ((255 - rowPtr1[pixelOffset + 2]) * (255 - rowPtr2[pixelOffset + 2]) >> 8)); // R rowPtrBlended[pixelOffset + 3] = (byte)255; // A } } } // Unlock the bits of each image after processing. img1.UnlockBits(data1); img2.UnlockBits(data2); blendedImage.UnlockBits(dataBlended); // Display the blended image. pictureBoxResult.Image = blendedImage; }
素材
到此這篇關(guān)于.net winform 實現(xiàn)CSS3.0 潑墨畫效果的文章就介紹到這了,更多相關(guān).net winform CSS3.0 潑墨畫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
asp.net Web Services上傳和下載文件(完整代碼)
隨著Internet技術(shù)的發(fā)展和跨平臺需求的日益增加,Web Services的應(yīng)用越來越廣,我們不但需要通過Web Services傳遞字符串信息,而且需要傳遞二進制文件信息。2008-12-12(asp.net c#)DropDownList綁定后顯示對應(yīng)的項的兩種方法
(asp.net c#)DropDownList綁定后顯示對應(yīng)的項的兩種方法 其實兩個方法的思路都是一樣,都是拿id去配對2011-04-04asp.net core配合vue實現(xiàn)后端驗證碼邏輯
網(wǎng)上的前端驗證碼邏輯總感覺不安全,驗證碼建議還是使用后端配合驗證。本文主要介紹了asp.net core配合vue實現(xiàn)后端驗證碼邏輯,感興趣的可以了解一下2021-06-06Repeater控件實現(xiàn)編輯、更新、刪除等操作示例代碼
如何在Repeater控件中實現(xiàn)像GridView控件一樣的編輯、更新、刪除功能?下面有個不錯的示例,感興趣的朋友可以參考下,希望對大家有所幫助2014-01-01ASP.NET中 script runat server 的用法
這篇文章主要介紹了ASP.NET中<script runat="server">的用法,以一個較為簡單的例子分析了ASP.NET中<script runat="server">的特點及具體用法,對于asp.net初學(xué)者來說具有一定的參考借鑒價值,需要的朋友可以參考下2014-11-11ASP.NET中ListView(列表視圖)的使用前臺綁定附源碼
ListView(列表視圖)想必大家都知道吧,接下來本文將介紹下ListView的使用前臺綁定,感興趣的你可不要錯過本文了哈2013-03-03ASP.NET State service狀態(tài)服務(wù)的問題解決方法
每次重啟機器以后,在.NET2005上跑Web程序老是遇到這樣的問題2008-11-11