zoukankan      html  css  js  c++  java
  • C#getPixel和内存法读取灰度图信息

    getPixel方法:

            private int getPixels(Bitmap bmpobj)
            {
                int[,] data = new int[1920, 1200];
                int max = 0;
                for (int i = 0; i < bmpobj.Height; i++)
                {
                    for (int j = 0; j < bmpobj.Width; j++)
                    {
                        Color b = bmpobj.GetPixel(j, i);
                        if (max < b.R)
                        {
                            max = b.R;
                        }
                    }
                }
                return max;
            }

    内存法:

    private int GetImgInfo(Bitmap a)
            {
                Bitmap src = new Bitmap(a);
                int w = src.Width;
                int h = src.Height;
                int max = 0;
                BitmapData srcData = src.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
                unsafe
                {
                    byte* p = (byte*)srcData.Scan0;
                    int gray = 0;
                    for (int j = 1; j < h - 1; j++)
                    {
                        for (int i = 1; i < w - 1; i++)
                        {
                            gray = p[0] ;//+= (p[0] + p[1] + p[2]) / 3;
                            p += 4;
                            if (max < gray)
                            {
                                max = gray;
                            }
                        }
                        p += srcData.Stride - w * 4;
                    }
                    src.UnlockBits(srcData);
                    return  max ;
                }
            }

     根据数组画图

      private Bitmap drawPic(byte[] srcdata, int width, int height)
            {
                // 8bit索引方式位图,设置灰度调色板
                var fmt = PixelFormat.Format8bppIndexed;
                var bmp = new Bitmap(width, height, fmt);
                var palette = bmp.Palette;
                for (var i = 0; i < 256; i++)
                {
                    palette.Entries[i] = Color.FromArgb(i, i, i);
                }
                bmp.Palette = palette;
    
                // 把数据映射到256灰度,unsafe填充到位图
                var bmpData = bmp.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.WriteOnly, fmt);
                unsafe
                {
                    var p = (byte*)bmpData.Scan0;
                    for (var i = 0; i < srcdata.Length; i++)
                    {
                        *p = (byte)(srcdata[i]);
                        p++;
                    }
                }
                bmp.UnlockBits(bmpData);
                return bmp;
            }
    View Code

     根据灰度图像读入一维数组 对于8位深度图像来说

    public unsafe byte[] ToArray(Bitmap b)
            {
                BitmapData data = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), ImageLockMode.ReadOnly, b.PixelFormat);
                int height = data.Height;
                int stride = data.Stride;
    
                IntPtr ptr = data.Scan0;
                int scanBytesLength = stride * height;
    
                byte[] rgbValues = new byte[scanBytesLength];
                unsafe
                {
                    Marshal.Copy(ptr, rgbValues, 0, scanBytesLength);
                }
                b.UnlockBits(data);
                return rgbValues;
            }
  • 相关阅读:
    BZOJ3670:[NOI2014]动物园(KMP)
    415. [HAOI2009] 旅行
    U10223 Cx大帝远征埃及
    U10206 Cx的治疗
    2741. [济南集训 2017] 掰巧克力
    复习题目汇总 over
    7-20 表达式转换(25 分)
    7-19 求链式线性表的倒数第K项(20 分)(单链表定义与尾插法)
    7-18 银行业务队列简单模拟(25 分)
    7-17 汉诺塔的非递归实现(25 分)(有待改进)
  • 原文地址:https://www.cnblogs.com/zhayunjia/p/8078606.html
Copyright © 2011-2022 走看看