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

最佳答案

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的方法,则只需使用XAML中可用的常规Canvas控件即可。



我在这里有一个相当深入的Win2D演练:

Win2D Getting Started: Windows Universal Application

10-01 02:18