zoukankan      html  css  js  c++  java
  • 在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不能和图像中坐标进行对应(特别要注意),如果对一幅图的每个点都进行同样的操作可以考虑第一种方法。但要对某些特定坐标上的点进行操作那就只能用第二种方法了。

  • 相关阅读:
    启动ASM 数据库的步骤
    ora15031 DBCA找不到ASM磁盘组
    ORA12514 解决方法
    Rhel Linux 5.1 (32 位)上安装 Oracle ASM数据库 11g 第 1 版
    Oracle ASM for linx as 4 x8664 创建过程
    在安腾AI64 RHEL3 U3服务器上安装ORACLE10G
    ora12528 : message 12528 not found; product=RDBMS ; facility=ora
    linux下启动oracle服务和监听程序
    linux内核升级RPM包安装问题!!!!
    AS4 下安装Oracle 10g(ASM & RAW)
  • 原文地址:https://www.cnblogs.com/zhayunjia/p/4595050.html
Copyright © 2011-2022 走看看