ImageIO.writeというと、BufferedImageなどをpngなどに変換する場合によく用いますが、そこでIndexOutOfBoundsExceptionとかいうのがスローされていて原因がさっぱりだったので調べた結果。
まずはググってみた。「ImageIO.write IndexOutOfBoundsException」とか。
海外のフォーラムで「バグっぽいね!ImageIOに渡す第三引数をMemoryCacheImageOutputStreamで包んでやればいいよ!」とかいう記述を見た。
サンプルコード:
1 2 |
//ImageIO.write(data,"png",baos); ImageIO.write(data,"png",new MemoryCacheImageOutputStream(baos)); |
で変更して再実験、確かにExceptionは出ない。だけど望む処理ができてない。MemoryCacheImageOutputStreamに関しては探しても日本語の情報出てきそうになかったのでとりあえず気にしないことにして元に戻したりしていた。(javax.imageio.stream以下のそんなもの聞いたこともなかったので)
~(30分経過)~
アレ?Exceptionは見つからない…?
1 2 3 4 5 6 |
try{ ImageIO.write(data,"png",new MemoryCacheImageOutputStream(baos)); //}catch(Exception e){ }catch(Throwable e){ e.printStacktrace(); } |
というわけでお見事OutOfMemoryErrorさんが釣れました。
普段メモリーの事気にしないとExceptionで全部取れる気がしてしまうけど、デバッグ時には何でもひっ捕らえるようにしよう…