谁有图片改色的代码? 将某颜色替换成某颜色,比如红色替换成白色,红色的RGB值不是固定的,因为有深有浅.希望有效率高点的算法,SetPixel这个效率比较低,耗时比较长,用ColorMatrix或BitmapData效率高点,但是自己不会写,网上找不到,诶. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://topic.csdn.net/u/20100526/16/bf002752-8fcf-4c6e-a8a5-5d712b7614a9.html?88733 没仔细测,按自己以前的代码修改了一下 private void ChangeColor() { Bitmap bmSrc = Image.FromFile("C:\\test.bmp"); BitmapData srcData = bmSrc.LockBits(new Rectangle(0,0,bmSrc.Width,bmSrc.Height), ImageLockMode.ReadWrite, bmSrc.PixelFormat); Color color = Color.Red; unsafe { byte* ptrSrcStart = (byte*)srcData.Scan0; byte* ptrSrc; int bytecount = bmSrc.PixelFormat == PixelFormat.Format24bppRgb ? 3 : 4; for (int i = 0; i < bmSrc.Height; i++) { ptrSrc = ptrSrcStart + srcData.Stride * i; for (int j = 0; j < bmSrc.Width; j++) { *(ptrSrc++) = color.B; *(ptrSrc++) = color.G; *(ptrSrc++) = color.R; if (bytecount == 4) { *(ptrSrc++) = color.A; } } } } bmSrc.UnlockBits(srcData); } 安全代码就是你说的setpixel.也是循环然后set。效率无比的差。 你自己也提到了ColorMatrix或者BitmapData如果是做图像处理(灰度,锐化等),可以考虑用ColorMatrix但你的要求是修改某个颜色为指定颜色,想要快,就用unsafe code + BitmapData Color color = Color.Red;颜色你自己可以设置,我只是举个例子,你得学会举一反三....Bitmap bmSrc = Image.FromFile("C:\\test.bmp");BitmapData srcData = bmSrc.LockBits(new Rectangle(0,0,bmSrc.Width,bmSrc.Height), ImageLockMode.ReadWrite, bmSrc.PixelFormat);//设置为红色Color color = Color.Red; 新手询问C#语法参考书 InvokeMember打开继承子窗体,实际打开的是父窗体 linq返回动态结果,急 C#打字游戏问题??帮帮!!!!!! C#调VC DLL时 Void* abc 类形怎么对应 treeview拖放子节点问题(类似QQ那样只拖放子节点到父节点) 怎么更改vs2005里project文件夹的默认路径 ClickOnce 高手帮忙! 高手看过来."无效的ResX 输入" 在线waitting 用什么软件可以修改exe的标题,改成自己想的标题,没有源码? resx属性在修改设计后被覆盖的问题 C# 网页中textbox的问题
private void ChangeColor()
{
Bitmap bmSrc = Image.FromFile("C:\\test.bmp");
BitmapData srcData = bmSrc.LockBits(new Rectangle(0,0,bmSrc.Width,bmSrc.Height), ImageLockMode.ReadWrite, bmSrc.PixelFormat);
Color color = Color.Red;
unsafe
{
byte* ptrSrcStart = (byte*)srcData.Scan0;
byte* ptrSrc; int bytecount = bmSrc.PixelFormat == PixelFormat.Format24bppRgb ? 3 : 4; for (int i = 0; i < bmSrc.Height; i++)
{
ptrSrc = ptrSrcStart + srcData.Stride * i;
for (int j = 0; j < bmSrc.Width; j++)
{
*(ptrSrc++) = color.B;
*(ptrSrc++) = color.G;
*(ptrSrc++) = color.R;
if (bytecount == 4)
{
*(ptrSrc++) = color.A;
}
}
}
}
bmSrc.UnlockBits(srcData);
}
颜色你自己可以设置,我只是举个例子,你得学会举一反三....
Bitmap bmSrc = Image.FromFile("C:\\test.bmp");
BitmapData srcData = bmSrc.LockBits(new Rectangle(0,0,bmSrc.Width,bmSrc.Height), ImageLockMode.ReadWrite, bmSrc.PixelFormat);
//设置为红色
Color color = Color.Red;