小包子kairos 2017-10-23 14:41 采纳率: 0%
浏览 3040

C# 图像处理 灰度图 System.OverflowException:“溢出错误。”

代码是我在学习赵春江老师的C#数字图像处理算法典型实例中搬到VS2017上的,
由于随书附带的源代码,年份久远,不能直接在VS2017上运行,所以text文档打开,搬到VS上试图运行的,使用的图片已经是8位深度灰度处理过的图片,但是却无法解释溢出错误
,本人纯属菜鸟,希望各位有经验的同学指点一番。

代码如下:
namespace WindowsFormsPictureToMatrix
{
public partial class histForm : Form
{
//图像数据
private System.Drawing.Bitmap bmpHist;
private int[] countPixel;
//记录最大的灰度个数
private int maxPixel;
public histForm(Bitmap bmp)
{
InitializeComponent();
//将主窗体的数据传递给子窗体
bmpHist =bmp;
countPixel = new int[256];
}

    private void histForm_Load(object sender, EventArgs e)
    {
        //锁定8位灰度位图
        Rectangle rect = new Rectangle(0, 0, bmpHist.Width, bmpHist.Height);
        System.Drawing.Imaging.BitmapData bmpData =
            bmpHist.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, bmpHist.PixelFormat);
        IntPtr ptr = bmpData.Scan0;

        int bytes = bmpHist.Width * bmpHist.Height;
        //int bytes = bmpData.Stride * bmpData.Height;

        byte[] grayValues = new byte[bytes];
        System.Runtime.InteropServices.Marshal.Copy(ptr, grayValues, 0, bytes);


        byte temp = 0;
        maxPixel = 0;

        Array.Clear(countPixel, 0, 256);

        for (int i = 0; i < bytes; i++)
        {
            temp = grayValues[i];

            countPixel[temp]++;
            if (countPixel[temp] > maxPixel)
            {
                maxPixel = countPixel[temp];
            }
            System.Runtime.InteropServices.Marshal.Copy(grayValues, 0, ptr, bytes);
            bmpHist.UnlockBits(bmpData);
        }
    }


    private void histForm_Paint(object sender, PaintEventArgs e)
    {
        Graphics g = e.Graphics;

        Pen curPen = new Pen(Brushes.Black, 1);

                //绘制横纵坐标
        g.DrawLine(curPen, 50, 240, 320, 240);
        g.DrawLine(curPen, 50, 240, 50, 30);

        g.DrawLine(curPen, 100, 240, 100, 242);
        g.DrawLine(curPen, 150, 240, 150, 242);
        g.DrawLine(curPen, 200, 240, 200, 242);
        g.DrawLine(curPen, 250, 240, 250, 242);
        g.DrawLine(curPen, 300, 240, 300, 242);
                    //横坐标刻度
        g.DrawString("0", new Font("New Timer", 8), Brushes.Black, new PointF(46, 242));
        g.DrawString("50", new Font("New Timer", 8), Brushes.Black, new PointF(92, 242));
        g.DrawString("100", new Font("New Timer", 8), Brushes.Black, new PointF(139, 242));
        g.DrawString("150", new Font("New Timer", 8), Brushes.Black, new PointF(189, 242));
        g.DrawString("200", new Font("New Timer", 8), Brushes.Black, new PointF(239, 242));
        g.DrawString("250", new Font("New Timer", 8), Brushes.Black, new PointF(289, 242));

        g.DrawLine(curPen, 48, 40, 50, 40);
        g.DrawString("0", new Font("New Timer", 8), Brushes.Black, new PointF(34, 234));
        g.DrawString(maxPixel.ToString(), new Font("New Timer", 8), Brushes.Black, new PointF(18, 34));

        //绘制直方图纵坐标
        double temp = 0;
        for (int i = 0; i < 256; i++)
        {
            temp = 200.0 * countPixel[i] / maxPixel;
            g.DrawLine(curPen, 50 + i, 240, 50 + i, 240 - (int)temp);//溢出错误!!!
        }

        curPen.Dispose();
    }
        }
}


测试用图:
说明:csdn在编辑上传图片的时候不允许使用.bmp格式,我就改成了.jpg格式,不知道格式会不会对程序有所影响,如果有必要,还请各位帮我查看问题的时候修改为.bmp,谢谢各位。
![图片说明](https://img-ask.csdn.net/upload/201710/23/1508769669_814570.jpg)
  • 写回答

2条回答

  • threenewbee 2017-10-24 03:28
    关注

    要么格式不对,要么图像太大

    评论

报告相同问题?

悬赏问题

  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥30 python代码,帮调试,帮帮忙吧