【问题标题】:How to display images on top of each other using C# (Forms or WPF)?如何使用 C#(Forms 或 WPF)在彼此之上显示图像?
【发布时间】:2011-07-18 06:50:21
【问题描述】:

我需要将图像叠加显示。这可以是合成\分层图像或单独的图像。这通常是一个较大的图像,顶部有较小的图像。使用复合\分层方法,较小的图像每个都需要是一个单独的(并且可访问的)层。使用单独的图像方法,较小的图像位于顶部,具有透明背景。无论采用哪种方法,都必须可以访问较小的图像,即可以移动(拖动)或删除。应用程序需要将这些图像一起显示(就像是一张图像一样)并跟踪较小图像的坐标(位置)。

当前(概念验证)解决方案有一个 PictureBox 控件,用于显示大图像和一个树形视图。节点从树视图拖到图片框并使用图形 DrawString 或 DrawImage 方法进行渲染——这些绘制较小的图像。问题是,一旦绘制了较小的图像,我就无法将其作为单独的图形对象返回。图片框将其“视为”当前图像的一部分。

我需要在 C#(WinForms 或 WPF)中执行此操作。并且图像类型必须是通用且开放的格式,即不是专有的。最好没有第三方控制。

有什么建议\指导吗?

【问题讨论】:

    标签: c# wpf winforms graphics


    【解决方案1】:

    WPF 将是我为这个项目选择的技术。

    • 拖放方式更好,没有闪烁,更好的概念
    • 直接在硬件上渲染,图像处理更流畅

    实现的总体思路:

    • MVVM 模式
    • ViewModel 保存您的图层信息
    • ItemsControl 绑定到包含 DataTemplate 的小叠加图像集合,该数据模板在基于 Thumb(用于拖放功能)的自定义 UserControl 将小图像显示在顶部时可视化图像。

    易于添加功能以分别拖动、编辑、隐藏每个小图像。

    【讨论】:

    • 你能告诉我如何做一个代码示例吗?
    【解决方案2】:

    问题是,一旦绘制了较小的图像,我就无法返回 将其作为单独的图形对象。图片框将其“视为”一部分 当前图像。

    这种行为是完全正常的。 GDI 绘图不适用于对象。要按照您的要求进行操作,您需要跟踪可能导致最终图像发生变化的任何事件,并且当此类事件发生时,您需要从头开始绘制整个图像,包括第一张图像(分配背景图像,我猜)。

    【讨论】:

      【解决方案3】:

      可以为每张图片创建图片框。透明背景会产生单幅图像的效果。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多