2

我在 win2d 画布上以不同的点和不同的大小添加两个不同的图像,并运行应用程序显示两个图像完美点设置显示。然后我如何选择图像并在画布上移动。

4

1 回答 1

3

Win2D 是即时模式图形库(来自 Wikipedia)

即时模式渲染是图形库的应用程序编程接口的一种样式,其中客户端调用直接导致图形对象渲染到显示器。它不排除使用双缓冲。与保留模式相比,API 库不保存要呈现的对象列表。相反,应用程序必须在每次需要新帧时重新发出描述整个场景所需的所有绘图命令,而不管实际更改如何。这种方法为应用程序提供了最大程度的控制和灵活性。

因此,您可以保留要修改的任何对象的引用,因为一旦绘制它就会丢失。


因此,将您定义CanvasBitmap为全局资源或创建某种类型的 ResourceLocator。然后创建一个您自己的类来存储 x,y,width,height 有点像自定义对象;

public class GenericItem
{
    public CanvasBitmap b;
    public int x;
    public int y;
    public int w;
    public int h;
}

Win2D的修改示例:

CanvasBitmap cat, mouse;
GenericItem gi_cat;

将您的位图加载到:

async Task CreateResourcesAsync(CanvasControl sender)
{
    cat = await CanvasBitmap.LoadAsync(sender, "ShawnsCat.jpg");
    mouse = await CanvasBitmap.LoadAsync(sender, "Mouse.png");

    // create your GenericItem here
    gi_cat = new GenericItem();
    // fill in your x,y,width,height,bitmap
}

现在画

void myWidget_Draw(CanvasControl sender, CanvasDrawEventArgs args)
{
    args.DrawingSession.DrawImage(gi_cat.b, gi_cat.x, gi_cat.y);
}

现在您可以修改 gi_cat.x gi_cat.y 和您添加的任何属性。

gi_cat.x = 500;
gi_cat.y = 250;

并且您可以在画布控件上调用 Invalidate 方法导致重绘。

name_of_your_canvas.Invalidate();

这将导致画布控件使用新位置重绘。


基本上你必须自己处理所有事情。如果您正在寻找类似 DOM 的方法,那么只需使用CanvasXAML 中可用的常规控件。


我在这里有一个非常深入的 Win2D 演练:

Win2D 入门:Windows 通用应用程序

于 2016-05-20T01:31:37.767 回答