首页 > 解决方案 > “请求的比特率太小” - 在 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.");

我试图用自定义参数解决问题,但它们对我来说很难理解——没有任何影响。

标签: androidimagexamarinjpegjpeg2000

解决方案


我通过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 上的示例:

https://github.com/CherryBu/CSJ2KSample


推荐阅读