Uwp C++;WinRT-CanvasBitmap,如何动态创建位图,在其上绘制像素,然后显示到屏幕上?

Uwp C++;WinRT-CanvasBitmap,如何动态创建位图,在其上绘制像素,然后显示到屏幕上?,uwp,set,windows-runtime,pixel,c++-winrt,Uwp,Set,Windows Runtime,Pixel,C++ Winrt,如何: 动态创建大小为512x512的位图 在位图上绘制具有颜色的像素,如SetPixel(x、y、颜色) 是否将创建的位图显示到面板屏幕 从Wi2D GiTub中,作者建议使用CavaStupMas.StupIxelBythin,显然很难在C++ WiRT中找到工作样本,下载的Wi2D库源仅在C中,并且必须将其转换成C++,并且没有单个像素写入特征。 可能是我是一个老手和老手程序员,用传统的编码方式“直接写在屏幕上”,我发现很多人都问过这样的事情,但是找不到一个完整的解决方案,更不用说C++中

如何:

  • 动态创建大小为512x512的位图

  • 在位图上绘制具有颜色的像素,如SetPixel(x、y、颜色)

  • 是否将创建的位图显示到面板屏幕

  • <>从Wi2D GiTub中,作者建议使用CavaStupMas.StupIxelBythin,显然很难在C++ WiRT中找到工作样本,下载的Wi2D库源仅在C中,并且必须将其转换成C++,并且没有单个像素写入特征。

    可能是我是一个老手和老手程序员,用传统的编码方式“直接写在屏幕上”,我发现很多人都问过这样的事情,但是找不到一个完整的解决方案,更不用说C++中的示例源代码了。 我暂时不想进入Win2D、DirectX、Unity或任何与GPU或CPU相关的原因。此外,我的COM知识还不具备,查看DirectX模板源代码,已经吓跑了我,尽管我以前在Win32中使用DirectX 2D编写过

    <>我是C++的新手,只需要在上面的3个语句中编写一个纯C++的WWRT的纯代码样本,用XAML编写UWP。 一旦解决了这个问题,我就可以轻松地将我的3D知识移植到WinRT UWP平台

    任何想法或参考都将不胜感激


    请告知。

    查看
    可写位图
    类,您可以直接通过属性操作位图的像素


    页面上有一个示例。在页面右上角,选择首选语言为
    C++/WinRT

    查看
    writeablebitmap
    类,您可以直接通过属性操作位图的像素

    页面上有一个示例。在页面右上角,选择首选语言为
    C++/WinRT

    如上所述,可以使用渲染到内存位图中

    对于完整的工作示例,请从“空白应用程序(C++/WinRT)”模板开始(称之为“WriteableBitmapSample”)。这为您提供了一个很好的起点,一个只有一个页面的完整应用程序

    要设置
    MainPage
    为位图腾出空间,请在生成的MainPage.xaml文件中使用以下代码:

    如前所述,可以使用渲染到内存位图中

    对于完整的工作示例,请从“空白应用程序(C++/WinRT)”模板开始(称之为“WriteableBitmapSample”)。这为您提供了一个很好的起点,一个只有一个页面的完整应用程序

    要设置
    MainPage
    为位图腾出空间,请在生成的MainPage.xaml文件中使用以下代码:


    <代码>谢谢提示,我错过了上面的C++/WRT选项。我会再试一次,因为我也看到了这个页面,但使用了名称空间winrt;不确定是否有效,将尝试。我已经解决了此问题。要在计时器例程下显示最终的WriteableBitmap,它必须是新的位图对象,其中自动位图{WriteableBitmap(宽度、高度)}和myBitmap().Source(位图);必须在计时器例程下保存,不能仅为myBitmap()。源(位图)。我已经检查过了,这样做没有内存泄漏。谢谢你的提示。谢谢你的提示,我错过了上面的C++/WRET选项。我会再试一次,因为我也看到了这个页面,但使用了名称空间winrt;不确定是否有效,将尝试。我已经解决了此问题。要在计时器例程下显示最终的WriteableBitmap,它必须是新的位图对象,其中自动位图{WriteableBitmap(宽度、高度)}和myBitmap().Source(位图);必须在计时器例程下保存,不能仅为myBitmap()。源(位图)。我已经检查过了,这样做没有内存泄漏。谢谢。我注意到SetPixel()不能在计时器例程下保存,例如:MainPage::OnInit(){m_wb=WriteableBitmap(m_io.sx_max,m_io.sy_max);m_pb=m_page[n].wb.PixelBuffer().data();m_img.Source(m_wb);这取决于您使用的计时器。如果您在UI线程上使用,您应该能够访问
    WriteableBitmap
    。另一方面,如果您使用,则无法使用
    WriteableBitmap
    ,除非您将访问移到UI线程上(例如,通过
    co_Wait
    等待
    resume\u前台对象)。我注意到SetPixel()不能在计时器例程下保存,例如:MainPage::OnInit(){m_wb=WriteableBitmap(m_io.sx_max,m_io.sy_max);m_pb=m_page[n].wb.PixelBuffer().data();m_img.Source(m_wb);这取决于您使用的计时器。如果您在UI线程上使用,您应该能够访问
    WriteableBitmap
    。另一方面,如果您使用,则无法使用
    WriteableBitmap
    ,除非您将访问移到UI线程上(例如,通过
    co_wait
    等待
    resume\u前台对象)。