私が見つけたサンプルコードで白黒に変換する平面画像があります。次に、次のコードセクションのためにBufferedImageに変換する必要があります。しかし、次の例外が発生します。java planarimageをbufferedimageに変換しようとしましたが、colormodelは互換性がありません
java.lang.IllegalArgumentException:指定されたColorModelがイメージSampleModelと互換性がありません。 javax.media.jai.RenderedOp.getRenderingでjavax.media.jai.RenderedOp.createRendering(RenderedOp.java:867) でjavax.media.jai.PlanarImage.setImageLayout(PlanarImage.java:535) (RenderedOpで 。 java:888) at javax.media.jai.RenderedOp.createInstance(RenderedOp.java:799) (javax.media.jai.RenderedOp.createRendering(RenderedOp.java:867) 、javax.media.jai.RenderedOp) CopyData(RenderedOp.java:2284)
ここでは黒と白に変換するIが見出さコード(サンの例では、私が考える)である:
ParameterBlock pb = new ParameterBlock();
pb.addSource(input);
ColorModel cm = new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_GRAY), new int[] {8},
false,
false,
Transparency.OPAQUE,
DataBuffer.TYPE_BYTE);
pb.add(cm);
PlanarImage src = JAI.create("ColorConvert", pb);
pb = new ParameterBlock();
pb.addSource(src);
String opName = null;
opName = "errordiffusion";
LookupTableJAI lut = new LookupTableJAI(new byte[] {(byte)0x00, (byte)0xff});
pb.add(lut);
pb.add(KernelJAI.ERROR_FILTER_FLOYD_STEINBERG);
// Create a layout containing an IndexColorModel which maps
// zero to zero and unity to 255.
ImageLayout layout = new ImageLayout();
byte[] map = new byte[] {(byte)0x00, (byte)0xff};
cm = new IndexColorModel(1, 2, map, map, map);
layout.setColorModel(cm);
// Create a hint containing the layout.
RenderingHints hints = new RenderingHints(JAI.KEY_IMAGE_LAYOUT,layout);
// Dither the image.
PlanarImage dst = JAI.create(opName, pb, hints);
ここで私は、私が試してみました順に、BufferedImageのに変換しようとしたものである:
//doesn't work
BufferedImage image = dst.getAsBufferedImage();
//thought of using the color model the b&w process did,also doesn't work
byte[] map = new byte[] {(byte)0x00, (byte)0xff};
ColorModel cm = new IndexColorModel(1, 2, map, map, map);
BufferedImage image = new BufferedImage(cm, dst.copyData(), false, null);
//I had the most hope for this one,but same error again
WritableRaster wr = dst.copyData();
ColorModel cm = PlanarImage.createColorModel(wr.getSampleModel());
BufferedImage image = new BufferedImage(cm, wr, false, null);
誰もが私が間違っているのを教えすることはできますか?
dst.getNumBands()
を呼び出してもこのエラーが発生することがわかりました。明らかに私はここで何をしているのか分かりません。より正確には、dst.betNumbBands();
を呼び出すと、次のようになります。
java.lang.IllegalArgumentException:指定されたColorModelがイメージSampleModelと互換性がありません。 javax.media.jai.RenderedOp.getRenderingでjavax.media.jai.RenderedOp.createRendering(RenderedOp.java:867) でjavax.media.jai.PlanarImage.setImageLayout(PlanarImage.java:535) (RenderedOpで 。 java:888) at javax.media.jai.RenderedOp.createInstance(RenderedOp.java:799) (javax.media.jai.RenderedOp.createRendering(RenderedOp.java:867) 、javax.media.jai.RenderedOp) javax.media.jai.PlanarImage.getNumBandsでgetSampleModel(RenderedOp.java:2233) (PlanarImage.java:678)
エラー:BandCombine:行列の行に正しい数のエントリがありません。 –