用VS2010编程图像处理程序在打开一幅图像时,我设置picturebox1的大小为256*256,打开一幅256*256的彩色图像是能完全打开的。但是我的毕设用的是老师拍摄的3648*2736,大小3M的带孔零件照片。打开只能显示一小部分。我要边缘提取分割全部圆孔,所以要全部显示出来的。老师说不要改动原零件照片,而是在picturebox右边和下面放水平和垂直滚动条,这样显示整幅图片。我是小白,不知道该怎么办了。还有随便问一下,我在采样时打开的彩色图像,在采样后还是彩色的,但是量化时打开的彩色图像为何量化后都是灰度图的了呢,不是说灰度图是RGB各分量相等的“彩色图”吗,难道我的彩色图的RGB分量都是相等的么。下面是我的代码:
 
        //采样
        private void menuItem6_Click(object sender, EventArgs e)
        {
            if (curBitmap != null)
            {
                this.Text = "第2章 图像数字化";
                paramDialog dialog = new paramDialog();
                if (dialog.ShowDialog() == DialogResult.OK)
                {
                    int d = Convert.ToInt32(dialog.getParam);
                    Bitmap bm = new Bitmap(pictureBox1.Image);
                    int dd = d * d;
                    for (int j = 0; j < ih; j=j+d)
                    {
                        for (int i = 0; i < iw; i=i+d)
                        {
                            int r = 0, g = 0, b = 0;
                            for (int k = 0; k < d; k++)
                            {
                                for (int l = 0; l < d; l++)
                                {
                                    r = r + bm.GetPixel(i + k, j + l).R;
                                }
                            }                            for (int k = 0; k < d; k++)
                            {
                                for (int l = 0; l < d; l++)
                                {
                                    g = g + bm.GetPixel(i + k, j + l).G;
                                }
                            }                            for (int k = 0; k < d; k++)
                            {
                                for (int l = 0; l < d; l++)
                                {
                                    b = b + bm.GetPixel(i + k, j + l).B;
                                }
                            }
                            r = (int)(r / dd);
                            g = (int)(g / dd);
                            b = (int)(b / dd);
                            for (int k = 0; k < d; k++)
                            {
                                for (int l = 0; l < d; l++)
                                {
                                    bm.SetPixel(i + k, j + l, Color.FromArgb(r, g, b));
                                }
                            }                        }
                    }
                    pictureBox2.Refresh();
                    pictureBox2.Image = bm;
                    label2.Text = "采样后";
                }            }
        }
//量化
        private void menuItem8_Click(object sender, EventArgs e)
        {
            if (curBitmap != null)
            {
                this.Text = "第2章 图像数字化";
                paramDialog dialog = new paramDialog();
                dialog.label1.Text = "灰度级数";
                dialog.groupBox1.Text = "输入灰度级数(2/4/8/16/32/64/128/256)";
                if (dialog.ShowDialog() == DialogResult.OK)
                {
                    int level = Convert.ToInt32(dialog.getParam);
                    int greyLevel = 256 / level;
                    int r, g, b,temp;
                    Bitmap bm = new Bitmap(pictureBox1.Image );
                    for (int j = 0; j < ih; j++)
                    {
                        for (int i = 0; i < iw; i++)
                        {
                            r = bm.GetPixel(i, j).R;
                            temp = (int)(r / greyLevel);
                            r = temp * greyLevel;                            g = bm.GetPixel(i, j).G;
                            temp = (int)(r / greyLevel);
                            g = temp * greyLevel;                            b = bm.GetPixel(i, j).B;
                            temp = (int)(r / greyLevel);
                            b = temp * greyLevel;                            bm.SetPixel(i, j, Color.FromArgb(r, g, b));
                        }
                    }
                    pictureBox2.Refresh();
                    pictureBox2.Image = bm;
                    label2.Text = "量化后";
                }            }
        }
C#采样量化显示大图像

解决方案 »

  1.   

    修改属性。在picturebox的属性表里有一个是否添加滚动条。选是就好了
      

  2.   

    1.我不喜欢采用这种方法,如果图像尺寸大于界面,我更喜欢使用独立的软件来进行观察
    2.把灰度图装入RGB空间时,才是三个通道相等,事实上,灰度图的文件数据就有一个通道。
      

  3.   

    能这样打开一幅图片说明你的机器不错哦。
    如楼上所说jpg 灰度图本来就是单独存储的。
      

  4.   

    给你建议,别用picturebox,用GDI,网上有代码