1

我的第一个问题在这里。而且我确定这很容易,但是我在任何地方都找不到解决方案,我已经阅读了很多书,只是无法理解我需要做什么:

  • 我有一个要存储的 *.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();
        }
    }
}
4

1 回答 1

1

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

此外,您可能想看看这个关于比较颜色的问题。它建议对于基本的颜色比较使用.ToArgb()颜色结构上的方法,==并且Equals不仅仅比较颜色值。

于 2012-04-30T23:02:24.077 回答