C#指针操作图片时是如何改变像素的?另外能讲讲思吗

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;

    }
  • 新手按教程写的几行,检查不出错误原因?!
  • 看了两篇关于优化程序的帖子,其中读到有关全局变量产生的疑惑
  • 遍历数组时遇到的一基础问题?
  • 最简单的两个数相加的程序,online judge为什么通不过?
  • nuget 到的C++库怎么开始使用啊?
  • 如何将数据库与visual studio 2008进行关联?
  • linux下插入U盘自动挂载后,用C获取其挂载点
  • a是多个字符和空格时,fscanf (fp,"%d",&a)调用之后,fp指针位置跳过空格吗?
  • 怎么做到多文件合并为一个压缩文件下载?
  • 10个数随机分布算法
  • 在写模板类时如何定义指向模板的指针的别名?