在C#中使用PictureBox上的位图绘图

时间:2012-04-30 22:06:36

标签: c# bitmap drawing picturebox graphic

我的第一个问题。而且我确信它很简单,但我无法在任何地方找到解决方案,我读过很多内容而无法理解我需要做什么:

  • 我有一个* .gif文件,我想存储在System.Drawing.Bitmap中,以便我可以访问GetPixel()方法
  • 我希望我的绘图能够控制(目前正在尝试PictureBox

到目前为止我得到了什么:

  • 我从文件中创建了一个模板Bitmap - 这是有效的(代码中的 map_t
  • 我创建了一个实际绘制的位图( map
  • 我可以将PictureBox图像设置为位图
    • 无法更改此位图。或者我可以,但结果不显示
    • 我以为我必须从该位图创建Graphic,然后更改它。我不知道我错过了什么。

这是代码:MapCanvas是一个表单上的PictureBox,一切都在MouseMove中,因为我试图围绕指针做一些圆圈 - 没有用,所以我最终得到了这个代码,这也不起作用。我已经阅读了我能找到的每一个问题,没有任何帮助......这是代码:

namespace Projekt_innowacje
{
    public partial class MapForm : Form
    {
        Bitmap map_t;
        Bitmap map;

        public MapForm()
        {
            InitializeComponent();
            map_t = new Bitmap("map.gif", true);
            map = new Bitmap(map_t.Width, map_t.Height);
            MapCanvas.Image = map;
        }

        private void MapCanvas_MouseMove(object sender, MouseEventArgs e)
        {
            Graphics canvas = Graphics.FromImage(map);
            for (int i = 0; i <= map.Width; i++)
                for (int j = 0; j <= map.Height; j++)
                    if (map.GetPixel(i, j) == Color.Red)
                        canvas.DrawLine(new Pen(Color.Blue), i, j, i + 1, j + 1);

                        // map.SetPixel(i, j, map.GetPixel(i, j)); // also doesn't work         

            //MapCanvas.Refresh(); 
            MapCanvas.Invalidate();

            canvas.Dispose();
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您要显示的代码永远不会修改画布/地图图像,除非您对未共享的map图像进行其他一些更改。在循环中,您测试map.GetPixel,但map在构造函数中创建为空白图像,因此其像素都不会是Color.Red。您是否打算反对您的模板进行测试?

另外,您可能需要查看有关比较颜色的this question。它建议在基本颜色比较中使用.ToArgb()方法对颜色结构使用==Equals做的不仅仅是比较颜色值。