C# 处理旋转屏幕的屏幕捕获脏矩形

C# 处理旋转屏幕的屏幕捕获脏矩形,c#,rotation,sharpdx,texture2d,.net-4.8,C#,Rotation,Sharpdx,Texture2d,.net 4.8,我正在使用SharpDX捕获屏幕,处理更改并复制到一个暂存纹理,稍后保存 旋转源屏幕(纵向)时,源纹理不旋转()。如何快速旋转纹理并将其放置到分段纹理 下面是我的代码(暂时忽略“移动矩形”部分,稍后我将不得不应用相同的内容): 使用(var screenTexture=resource.QueryInterface()) { #区域移动矩形(暂时忽略) var movedRectangles=新的OutputDuplicateMoveRectangle[info.TotalMetadataBuf

我正在使用
SharpDX
捕获屏幕,处理更改并复制到一个暂存纹理,稍后保存

旋转源屏幕(纵向)时,源纹理不旋转()。如何快速旋转纹理并将其放置到分段纹理

下面是我的代码(暂时忽略“移动矩形”部分,稍后我将不得不应用相同的内容):

使用(var screenTexture=resource.QueryInterface())
{
#区域移动矩形(暂时忽略)
var movedRectangles=新的OutputDuplicateMoveRectangle[info.TotalMetadataBufferSize];
DuplicatedOutput.GetFrameMoveRects(movedRectangles.Length、movedRectangles、out var movedRegionLength);
对于(var movedIndex=0;movedIndex左&下>上)
{
//将源矩形限制为目标矩形内的可用大小。
var sourceWidth=movedRectangles[movedIndex].SourcePoint.X+(右-左);
var sourceHeight=movedRectangles[movedIndex].SourcePoint.Y+(底部-顶部);
Device.ImmediateContext.CopySubresourceRegion(screenTexture,0,新ResourceRegion(movedRectangles[movedIndex].SourcePoint.X,movedRectangles[movedIndex].SourcePoint.Y,0,sourceWidth,sourceHeight,1),
BackingTexture,0,左-左,上-上);
}
}
#端区
#区域脏矩形
var dirtyRectangles=新的RawRectangle[info.TotalMetadataBufferSize];
DuplicatedOutput.GetFrameDirtyRects(DirtyRectanges.Length、DirtyRectanges、out var DirtyRegionLength);
对于(var dirtyIndex=0;dirtyIndex左&下>上)
Device.ImmediateContext.CopySubresourceRegion(屏幕纹理,0,新资源区域(左,上,0,右,下,1),BackingTexture,0,左-(左-偏移左),上-(上-偏移右));
}
#端区
}
据我所知,
dirtylectangles
数组和
screenTexture
给出的边界是旋转的

在获得正确的位置后,我必须先旋转纹理,然后再尝试复制到我的
BackingTexture

我的
BackingTexture
是这样创建的:


BackingTexture=新纹理2D(设备,新纹理2D说明
{
ArraySize=1,
BindFlags=BindFlags.RenderTarget | BindFlags.ShaderResource,
CpuAccessFlags=CpuAccessFlags.None,
格式=Format.B8G8R8A8_UNorm,
宽度=宽度,
高度=高度,
OptionFlags=ResourceOptionFlags.None,
MIP级别=1,
SampleDescription=新的SampleDescription(1,0),
用法=ResourceUsage.Default
});