我从服务器端获取base64格式的jp2。我能够将jpg转换为jp2形式的ImageMagick库并发送到服务器。他们可以使用Buffered Image和ImageIo将其转换为jpg。 但是我没有想到将jp2转换为jpg并在Imageview中渲染。 希望得到任何帮助。提前谢谢。
答案 0 :(得分:0)
您可以使用OpenJpeg库来解码Jpeg2000。您可以使用已编译的库https://github.com/DimaArts/OpenJpegAndroid。它包含编码jpeg2000的示例。 Library支持解码器和编码器的PNG输入和输出格式。 试试这个:
OpenJPEGJavaDecoder decoder = new OpenJPEGJavaDecoder();
String[] params2 = new String[4];
params2[0] = "-i";
params2[1] = mInputPath; // path to jp2
params2[2] = "-o";
params2[3] = mOutputPath // path to png
decoder.decodeJ2KtoImage(params2);
如果您使用的是JNI:
public int decodeJ2KtoImage(String[] parameters) {
return internalDecodeJ2KtoImage(parameters);
}
答案 1 :(得分:0)
您可能已经以某种方式解决了该问题,但是如果您仍在寻找解决方案,可以尝试使用JP2 for Android库。 (免责声明:我写了库。)它基于OpenJPEG,就像DimaArts的响应一样,但是它具有更好的Java接口。
将以下依赖项添加到您的build.gradle文件中:
implementation 'com.gemalto.jp2:jp2-android:1.0'
,并使用以下代码对JP2进行解码:
byte[] jp2Data = ...; //get the JP2 data from somewhere
Bitmap bmp = new JP2Decoder(jp2Data).decode();
imgView.setImageBitmap(bmp);
答案 2 :(得分:-1)
从https://stackoverflow.com/a/39103107/2760681
尝试此代码private static void convertImage(int randNum) throws IOException {
try {
File foundFile = new File("c:\\images\\" + randNum + ".jp2");
BufferedImage background = ImageIO.read(foundFile);
ImageIO.write(background, "jpg", new File("c:\\images\\" + randNum + ".jpg"));
System.out.println("jpg file is generated");
} catch (Exception e) {
// TODO: handle exception
System.out.println("No file " + randNum +".jp2 found");
}
}