AndroidでJPEG2000を読み込む必要があったので調べた結果、jj2000を使うことにしました。しかし、JJ2000ライブラリは、いろいろな派生物があってどれを使っていいか悩みました。
自分は、Androidで使えるBitmapが取り出せるもので、
NFC_DriversLicenseReader のJJ2000を使うことにしました。jj2000自体はjj2000ライセンス(?)ですが、NFC_DriverLicenseReaderはMIT License です。
まず、 ダウンロードしてjj2000フォルダをプロジェクトにコピーします。私は、以下の場所にコピーしました。
ただ、このまま使うとBitmapが白黒になるので、一部修正します。
jj2000/j2k/decoder/Decoder.javaの378行のコメントを外し、次の行をコメントアウトします
ImgWriterBitmap imwriter = new ImgWriterBitmapPPM(decodedImage,0,1,2); // ImgWriterBitmap imwriter = new ImgWriterBitmapPPM(decodedImage,0,0,0); //モノクロ対応 2012.08.06 TK
あとは、
val buffer = File("/sdcard/test.jp2").readBytes() val bmp = JJ2000Frontend.decode(buffer)
これでBitmapが得られます。参考に、MainActivityを次のように作って確認しました。
import android.support.v7.app.AppCompatActivity import android.os.Bundle import jj2000.JJ2000Frontend import kotlinx.android.synthetic.main.activity_main.* import java.io.File import java.io.RandomAccessFile class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val buffer = File("/sdcard/test.jp2").readBytes() val bmp = JJ2000Frontend.decode(buffer) imageView.setImageBitmap(bmp) } }
以上です。