Wpf 更新图像源的GPU性能

Wpf 更新图像源的GPU性能,wpf,Wpf,我渲染图像(D3DImage或InteropBitmap)。我调用Invalidate或AddDirtyRect。然后,系统调用子方法,主要是用值创建scructure和调用非管理方法。在此之后称为WritePostscript,更新后称为属性。所以,每次操作(我写得很早)完成后都会更新源代码,在这之后我会看到新的图像。 但是,如果我的项目有背景不透明的面板,那么每次更新imagesource时,GPU都会使用更多的资源。如果面板的背景是透明的,GPU使用的资源就会更少。如何使用非透明背景并具有

我渲染图像(
D3DImage
InteropBitmap
)。我调用
Invalidate
AddDirtyRect
。然后,系统调用子方法,主要是用值创建scructure和调用非管理方法。在此之后称为
WritePostscript
,更新后称为属性。所以,每次操作(我写得很早)完成后都会更新源代码,在这之后我会看到新的图像。
但是,如果我的项目有背景不透明的面板,那么每次更新imagesource时,GPU都会使用更多的资源。如果面板的背景是透明的,GPU使用的资源就会更少。如何使用非透明背景并具有良好的GPU性能

也许GPU在硬件级别被优化以使用透明?然而,我想这是另一种方式,因为使用透明性要困难得多。如果你能发布一些示例代码,这将帮助我们诊断问题。在XAML中:
下一步,您需要创建
var interopBitmap=Imaging.CreateBitmapSourceFromMemorySection(句柄、宽度、高度、PixelFormats.Bgr32、宽度*4、imageBytesOffset)作为InteropBitmap
并将其设置为图像的ImageSource。之后,您需要更新您的图像源:
任务。运行(()=>{while(true){u InteropBitmap.Dispatcher.Invoke(DispatcherPriority.Render,(Action)(()=>{u interopBitmap.Invalidate();});CancellationToken.None.WaitHandle.WaitOne(TimeSpan.frommilluses(30));};
Programm procexp.exe(查看->系统信息->GPU)我的电脑显示约25%。如果我将xaml
procexp.exe GPU的显示更改为约14%。也许GPU在硬件级别进行了优化,以使用透明度?然而,我通常会认为这是另一种方式,因为使用透明度是一种挑战更难。如果您可以发布一些示例代码,这将帮助我们诊断问题。在XAML中:
下一步,您需要创建
var interopBitmap=Imaging.CreateBitmapSourceFromMemorySection(handle,width,height,PixelFormats.Bgr32,width*4,imageBytesOffset)作为InteropBitmap
并将其设置为图像的ImageSource。在此之后,您需要更新图像源:
任务。运行(()=>{while(true){InteropBitmap.Dispatcher.Invoke(DispatcherPriority.Render,(操作)(()=>{u interopBitmap.Invalidate();});CancellationToken.None.WaitHandle.WaitOne(TimeSpan.frommilluses(30));};
procep.exe(查看->系统信息->GPU)我的电脑显示约25%。如果我更改xaml
procexp.exe GPU显示约14%。