使用SharpDX显示大图像

时间:2017-01-16 21:44:48

标签: c# image direct2d sharpdx wic

我正在尝试使用SharpDX从文件中绘制一张大图像(21000x7000)。

代码如下所示:

FromWicBitmap

执行时,我在Exception thrown: 'SharpDX.SharpDXException' in SharpDX.dll Additional information: HRESULT: [0x80070057], Module: [General], ApiCode: [E_INVALIDARG/Invalid Arguments], Message: The parameter is incorrect. 函数中遇到异常:

var data01 = "docs/Document01.pdf"
var data02 = "docs/Document02.pdf"
var data03 = "docs/Document03.pdf"
...
document.getElementById("doclink01").href = data01;
document.getElementById("doclink02").href = data02;
document.getElementById("doclink03").href = data03;
...

当我将图像尺寸调整为2100x700时,它会加载并显示得很好,因此问题在于图像尺寸。

我想要这个尺寸的图像,因为后来我计划添加缩放功能。

我是Direct2D的新手。解决这个问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

根据您的描述,听起来这个问题超出了Direct3D的纹理大小限制(Direct2D使用Direct3D进行工作,因此它具有相同的约束条件。)

如果您查看Direct3D Feature Level table中的最大纹理尺寸,您会看到范围从 4,096 16,384像素取决于图形硬件的级别。你可以:

  • 假设4,096是您的限制(如果您在具有不同图形卡的各种计算机上运行此程序,则应该执行此操作)
  • 运行dxdiag.exe,单击"显示1"选项卡,并查找功能级别 DDI 以查看可用的功能级别。

解决方案是在调用target.DrawBitmap之前调整图像大小,直到它符合像素限制。换句话说,你不能像你想的那样轻松地进行缩放工作 - 即使你放大和缩小纹理,在某些时候你必须重新采样或者它会比像素更像素化。原始图片。