android - “请求的比特率太小” - 在 Android 上显示 JPEG2000
问题描述
我正在尝试在 Android 上显示 jpeg2000 图像(jp2)。我正在使用 Xamarin 和Csj2k库(jj2000 库的 c# 端口)。
CSJ2K.J2kImage.FromBytes(ImageBytes).As<Bitmap>()
在 Android 7.0 上一切正常。 但在 Android 9.0 上,我收到以下错误: “请求的比特率太小”
$exception System.InvalidOperationException: 请求的比特率太小。
在 CSJ2K.j2k.codestream.reader.FileBitstreamReaderAgent..ctor
在 CSJ2K.j2k.codestream.reader.BitstreamReaderAgent.createInstance
在 CSJ2K.J2kImage.FromStream
在 CSJ2K.J2kImage.FromBytes*
当我正在查看库的实现时,这种情况是一个问题:
// If cannot even read the first tile-part
if (anbytes > tnbytes)
throw new System.ApplicationException("Requested bitrate is too small.");
我试图用自定义参数解决问题,但它们对我来说很难理解——没有任何影响。
解决方案
我通过Nuget包下载CSJ2K,Xamarin.Android版本为3.0.0,在Android 9.0上调试,没有问题。
在 Asset 文件中添加图片 jp2,并设置AndroidAsset
imageview1 = FindViewById<ImageView>(Resource.Id.imageView1);
Bitmap bitmap;
using (var stream = new MemoryStream())
{
this.Assets.Open("file2.jp2").CopyTo(stream);
stream.Seek(0, SeekOrigin.Begin);
bitmap = J2kImage.FromStream(stream).As<Bitmap>();
}
imageview1.SetImageBitmap(bitmap);
这是我在 github 上的示例: