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

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;

    }
【热门文章】
【热门文章】