WPF的應用程式,.NET Framework 4。
想實作圖片四周的邊緣透明化。
在網上找到了一個安卓端的例子,卻不知道怎么轉換成C#版本。
https://www.cnblogs.com/tangZH/archive/2018/03/15/8551632.html

原圖

效果圖
uj5u.com熱心網友回復:
可以試一試虛化處理,處理邊緣像素點就行了uj5u.com熱心網友回復:
沒有這方面的知識儲備
uj5u.com熱心網友回復:
WPF里面有沒有現成的我是不知道 不過寫代碼我就知道
Bitmap bmp = "你的圖片";
//用32位argb模式鎖定圖片
BitmapData bmpData = bmp.LockBits(new Rectangle(Point.Empty, bmp.Size), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
byte[] byColor = new byte[bmpData.Height * bmpData.Stride];
//bmpData.Stride 一行像素所占用的位元組數 != bmpData.Width * (位數 / 8) (不一定相等 Stride是記憶體對齊的 4倍對齊)
//bmpData.Scan0 像素資料在記憶體中的指標
Marshal.Copy(bmpData.Scan0, byColor, 0, byColor.Length);//將像素資料拷貝出來
for (int y = 0; y < bmp.Height; y++) {
for (int x = 0; x < bmp.Width; x++) {
byte byB = byColor[y * bmpData.Stride + (x * 3 + 0)];
byte byG = byColor[y * bmpData.Stride + (x * 3 + 0)];
byte byR = byColor[y * bmpData.Stride + (x * 3 + 0)];
byte byA = byColor[y * bmpData.Stride + (x * 3 + 0)];
//byA就是透明通道 你可以設定它改變該像素的透明值
//至于邊緣半徑怎么計算 以及透明過度值 這就看你自己造化了吧
}
}
Marshal.Copy(byColor, 0, bmpData.Scan0, byColor.Length);//將像素資料拷貝回去
bmp.UnlockBits(bmpData);//還原圖片
uj5u.com熱心網友回復:
byte byB = byColor[y * bmpData.Stride + (x * 3 + 0)];
byte byG = byColor[y * bmpData.Stride + (x * 3 + 1)];
byte byR = byColor[y * bmpData.Stride + (x * 3 + 2)];
byte byA = byColor[y * bmpData.Stride + (x * 3 + 3)];
尷尬 。。。。。
uj5u.com熱心網友回復:
看這里https://blog.csdn.net/zgke/article/details/4532275使用漸變透明畫刷,直接像素修改 都提供了
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
透明顏色byB、byG、byR 、 byA?
uj5u.com熱心網友回復:
這個我復制到一個測驗程式,透明區域的大小一直沒改成功。
uj5u.com熱心網友回復:
透明顏色byB、byG、byR 、 byA?
看來你似乎不知道什么是 A R G B 。。。。。
uj5u.com熱心網友回復:
嗯
uj5u.com熱心網友回復:
我記得wpf有個透明度的屬性,漸變改這個屬性的值就行了吧轉載請註明出處,本文鏈接:https://www.uj5u.com/net/284960.html
標籤:C#
上一篇:VS2019 不能把 Windowns桌面應用程式改變為控制臺應用程式嗎?
下一篇:嚴重性代碼說明專案檔案行禁止顯示狀態 錯誤“ResolveComReference”任務回傳了 false,但未記錄錯誤。DAL
