unsafe
{
Pixel* p = (Pixel*)bData.Scan0 + i * bmp.Height;
p->R = (byte)((int)p->R * 0.3);
p->G = (byte)((int)p->G * 0.59);
p->B = (byte)((int)p->G * 0.11);
}
Pixel里面是这个样子
public struct Pixel
{
public byte R;
public byte G;
public byte B;
}
内存中图片的颜色并没有改变。。。不是这样赋值的吗?
Pixel
这里的定义有问题 像素在内存存储是 B
G
R
这样的顺序 你这么定义会导致生成的颜色和预期不同
但是这不会导致你所说的
内存中图片的颜色并没有改变。。。
按照你的代码写的demo 运行正常 所以你贴出来的这部分代码不是导致问题的原因
static void Main(string[] args)
{
var bmp = new Bitmap(1, 1);
bmp.SetPixel(0,0,Color.Green);
bmp.Save(@"before.bmp",ImageFormat.Bmp);
var bmpData = bmp.LockBits(new Rectangle(0, 0, 1, 1), ImageLockMode.ReadWrite,bmp.PixelFormat);
unsafe
{
var p = (Pixel*)bmpData.Scan0;
p->R = (byte)((int)p->R *0.3);
p->G = (byte)((int)p->G *0.59);
p->B = (byte)((int)p->B *0.11);
}
bmp.UnlockBits(bmpData);
bmp.Save(@"after.bmp", ImageFormat.Bmp);
}
struct Pixel
{
public byte B;
public byte G;
public byte R;
}