我试图使用SharpDX从文件中绘制一个大图像(21000x7000)。
代码如下所示:
if (newBitmap==null)
{
ImagingFactory imagingFactory = new ImagingFactory();
NativeFileStream fileStream = new NativeFileStream(@"D:\path\myfile.png",
NativeFileMode.Open, NativeFileAccess.Read);
BitmapDecoder bitmapDecoder = new BitmapDecoder(imagingFactory, fileStream, DecodeOptions.CacheOnDemand);
BitmapFrameDecode frame = bitmapDecoder.GetFrame(0);
FormatConverter converter = new FormatConverter(imagingFactory);
// Format32bppPArgb
// Format32bppPRGBA
converter.Initialize(frame, SharpDX.WIC.PixelFormat.Format32bppPRGBA);
newBitmap = SharpDX.Direct2D1.Bitmap1.FromWicBitmap(target, converter);
}
target.DrawBitmap(newBitmap,new RawRectangleF(0,0,target.Size.Width,target.Size.Height),1,BitmapInterpolationMode.Linear );
在执行时,我在FromWicBitmap
函数中得到以下异常:
Exception thrown: 'SharpDX.SharpDXException' in SharpDX.dll
Additional information: HRESULT: [0x80070057], Module: [General], ApiCode: [E_INVALIDARG/Invalid Arguments], Message: The parameter is incorrect.
当我将图像大小调整到2100x700时,它会加载并显示得很好,所以问题在于图像大小。
我想要这个大小的图像,因为以后我计划添加缩放功能。
我对Direct2D完全陌生。处理这件事最好的方法是什么?
发布于 2018-01-17 17:29:36
从您的描述来看,这个问题似乎超出了Direct3D的纹理大小限制(Direct2D使用Direct3D来完成它的工作,因此它具有相同的约束)。
如果您查看Direct3D特征级表中的最大纹理维度,您将看到从4,096到16,384像素不等,这取决于图形硬件的级别。您可以:
解决方案是调整图像的大小,直到它符合像素限制,然后再调用target.DrawBitmap
。换句话说,你不可能像你想的那样轻松地缩放--即使你放大和缩小一个纹理,在某个时候你将不得不重采样,否则它将比原始图像更像素化。
https://stackoverflow.com/questions/41685483
复制相似问题