代码之家  ›  专栏  ›  技术社区  ›  jose

C中的图像和几何图形#

  •  1
  • jose  · 技术社区  · 16 年前

    我正在开发一个加载图像的应用程序,然后我必须用鼠标在图像上方标记一些点。这些点应该在一个单独的层上,即我不想修改图像数据。

    最好的方法是什么?我正考虑使用DirectX,但我发现它有点过时。GDI+解决了吗?

    提前谢谢

    5 回复  |  直到 16 年前
        1
  •  0
  •   Marcel B    16 年前

    这个怎么样?

    <Border>
        <Border.Background>
            <ImageBrush ImageSource="foo.jpg" />
        </Border.Background>
        <Canvas Background="Transparent"/>
    </Border>
    

    在背景中显示图像并将点绘制到 Canvas 就在那张照片的上方。

    编辑: 在C中应该是这样的:

    Border border = new Border();
    Canvas canvas = new Canvas()
    {
        Background = Brushes.Transparent
    };
    grid.AddChild(border);
    border.Child = canvas;
    border.Background = new ImageBrush();
    

    然后只需要将图像加载到边框。用ImageBrush包装背景。

        2
  •  3
  •   Eran Betzalel    16 年前

    DirectX是一种过度杀伤力,您应该使用gdi+(aka,system.drawing)。

        3
  •  3
  •   serhio    16 年前

    将背景图像用作priamry层(窗体上的onpaintbackground覆盖) 而onpaint用您的点覆盖“主”层。

        4
  •  1
  •   erikric    16 年前

    我认为wpf有一些用于图像处理的som选项。与其直接与DirectX交谈,与之合作应该更为舒适。

    不是直接问你要什么,但这篇文章可能会给你一些提示(除非我完全误解你)。

    http://www.codeproject.com/KB/WPF/ImageCropper.aspx

        5
  •  1
  •   Li0liQ    16 年前

    是的,GDI+就足够了。你只需要两张图片:

    • 一个包含背景,将是“只读”;
    • 另一个没有背景,只包含你画的点。

    您只需要在另一个图像上绘制一个图像,然后将结果显示给用户(注意使用双缓冲)。

    不过,我建议不要将这些点存储在单独的图像中,而是存储在单独的列表中,因为稍后可能需要对它们进行一些处理。因此,假设您使用的是缓冲区图像,您需要在缓冲区图像上绘制背景,然后从列表中绘制点,然后将结果显示给用户。

    如果需要的话,我只考虑在缓存方面为点添加额外的图像。

    推荐文章