• 在c#中用指针操作图片像素点


    在Bitmap类中有两个函数SetPixel,GetPixel,分别用来设置或读取图片中指定点的颜色(这里发现了VS的一个错误,SetPixel的文档说明写的是“获取颜色”??)。

          当要对一幅图进行相当操作时,用这两个函数,性能上就不尽人意了……这时就可以考虑用指针来对性能进行提升。

          这里介绍两种方法:

          一、

    1public struct Pixel
     2{
       public byte B;         //
       public byte G;        //
       public byte R;        //
     6}
     8public void ReadColor()
     9{
       Bitmap b=new Bitmap("d:\a.bmp");
       BitmapData bData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), ImageLockMode.ReadWrite , PixelFormat.Format24bppRgb);
       unsafe 
       {
               Pixel* p = null;
               for (int x = 0; x < b.Width; x++) 
               {
                   p = (Pixel*)bData.Scan0 + x * b.Height;
                   for (int y = 0; y < b.Height; y++) 
                   {
                           int R = p->R;
                           int G = p->G;
                           int B = p->B;
                           //这里获取颜色分量的各个值,同样在这里还可以对其进行赋值
                   }
               }
       }
       b.UnlockBits(bData);
    28}
    

      二:

    //这里的x,y参数,指的是图像中像素点的x,y坐标
     pubic void ReadColor(int x,int y)
     {     
        Bitmap b = new Bitmap("d:\a.bmp");
       BitmapData bData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), ImageLockMode.ReadWrite, 
    PixelFormat.Format24bppRgb);
                unsafe {
                byte* color = (byte*)bData.Scan0 + x * 3 + y *       Data.Stride;
                    int R = *(color + 2);
                    int G = *(color + 1);
                    int B = *color;
                    //同样在这里也可以对其行进修改
               }   
                b.UnlockBits(bData);
    }
    

      

    通过以上的代码可以很容易的知道怎么指针来操作像素点。

    这里要说明的是,第一种方法中的x,y不能和图像中坐标进行对应(特别要注意),如果对一幅图的每个点都进行同样的操作可以考虑第一种方法。但要对某些特定坐标上的点进行操作那就只能用第二种方法了。

  • 相关阅读:
    输入和输出--java的NIO
    Java的NIO
    Java的nio
    输入和输出--java序列化机制
    输入和输出--javase中的路径
    输入和输出--重定向标准输入和输出
    输入和输出--RandomAccessFile类
    输入和输出--IO流
    输入和输出--File类
    无废话XML--DOM4J
  • 原文地址:https://www.cnblogs.com/zhayunjia/p/4595050.html
Copyright © 2020-2023  润新知