WPF怎么实现为图片去背景?我这两种方案错在哪了?请大神指点指点!!!!!
如题,不知道大家有谁做过这一方面的功能,我的思路是这样的:鼠标点击一点,取出该点的颜色,然后将图片上的这个颜色替换成透明的;如果鼠标滑动,就将所划过的颜色存储成一个列表,遍历图片,将图片中与列表相同的颜色替换成透明的。不知道这个思路对不对?
我将代码贴在下面,第一种方法,出来的图片带条纹,不能完全去除,我怀疑是不是我对byte数组解读的不对,第二种方法原有的颜色倒是去掉了,但是背景色变成了白色,而不是透明色,很伤脑筋!还望大神指点一二,非常感谢!
我将代码贴在下面,第一种方法,出来的图片带条纹,不能完全去除,我怀疑是不是我对byte数组解读的不对,第二种方法原有的颜色倒是去掉了,但是背景色变成了白色,而不是透明色,很伤脑筋!还望大神指点一二,非常感谢!
#region 方法一:修改byte[]的颜色
//将图片转成byte数组存入内存中,在数组中修改鼠标点击的颜色, i:B i+1:G i+2:R i+3:Alpha 颜色一致的话改为 R:0xff,B:0xff,G:0xff Alpha:0
BitmapData bmpData = bmp.LockBits(new System.Drawing.Rectangle(0, 0, bmp.Width, bmp.Height), System.Drawing.Imaging.ImageLockMode.ReadWrite, bmp.PixelFormat);
byte[] maskImageRGBData = new byte[bmpData.Stride * bmpData.Height];
System.Runtime.InteropServices.Marshal.Copy(bmpData.Scan0, maskImageRGBData, 0, maskImageRGBData.Length);
//鼠标选中的当前颜色
byte[] curColorBytes = new byte[3];
//curColorBytes[0] = 0xff;
//curColorBytes[1] = 0xff;
//curColorBytes[2] = 0xff;
//curColorBytes[3] = 0;
curColorBytes[0] = currentColor.B;
curColorBytes[1] = currentColor.G;
curColorBytes[2] = currentColor.R;
for (int j = 0; j + 2 < maskImageRGBData.Length; j += 4)
{
if(curColorBytes[0]==maskImageRGBData[j]&&curColorBytes[1]==maskImageRGBData[j+1]&&curColorBytes[2]==maskImageRGBData[j+2])
{
maskImageRGBData[j] = 0xff;
maskImageRGBData[j+1] = 0xff;
maskImageRGBData[j+2] = 0xff;
maskImageRGBData[j+3] = 0;
}
}
System.Runtime.InteropServices.Marshal.Copy(maskImageRGBData, 0, bmpData.Scan0, maskImageRGBData.Length);
bmp.UnlockBits(bmpData);
#endregion
#region 方法二:直接修改该像素点的值 currentColor即为鼠标获取到的像素点
if (bmp != null)
{
for (int i = 0; i < bmp.Width; i++)
{
for (int j = 0; j < bmp.Height; j++)
{
cur = bmp.GetPixel(i, j);
if (cur.Equals(currentColor))
{
bmp.SetPixel(i, j, System.Drawing.Color.FromArgb(0x00, 0xff, 0xff, 0xff));//System.Drawing.Color.Transparent); //
bmp.MakeTransparent(cur);
}
}
}
}
#endregion
bmp.Save("d://111.png");
...全文
相关推荐
WPF 动态变更image背景图片
wpf UI元素不能在线程中操控,现在问题解决了,很好用的呦!
【图片OCR内容改名】如何OCR指定区域图片自动识别内容给图片重命名的实现教程,基于WPF和腾讯云的实现方案
在日常工作和生活场景中,我们常常会接触到大量带有文字信息的图片,例如证件照片、票据图片、带有标识的文档图片等。当需要对大量图片进行管理时,传统的根据拍摄时间或编号命名图片的方式,很难快速准确地定位和区分特定的图片。基于此,开发一个基于WPF界面框架,结合腾讯云OCR服务,实现指定区域图片自动识别内容并给图片重命名的工具就显得尤为实用。它可以帮助各类企业和个人更高效地管理和利用图片资源,提升工作效率。
WPF中使jpg,bmp图片背景透明的方法
WPF中使jpg,bmp图片背景透明的方法
C# WPF 去除图片纯色背景
C# WPF 去除图片纯色背景,获取经容差计算后的最终图。 C# WPF 去除图片纯色背景,获取经容差计算后的最终图。
【示例】在WPF简单实现图片圆角、只显示部分、渐变
在WPF中,无需编写C#代码,即可通过XAML实现图片的圆角、倒角、只显示部分内容、渐变等效果,在很多软件中大量使用。此示例模块化编写,代码简单易懂。


