Ich habe ein planarimage, das ich über ein Beispielcode, den ich fand, zu Schwarz und Weiß umwandelte. Ich muss es dann in einen BufferedImage für den nächsten Codeabschnitt konvertieren. Aber ich bekomme die folgende Ausnahme:Java versuchen, Planarimage zu pufferedimage zu konvertieren, aber Colormodel ist inkompatibel
java.lang.IllegalArgumentException: Das angegebene ColorModel ist inkompatibel mit dem Bild SampleModel. bei javax.media.jai.PlanarImage.setImageLayout (PlanarImage.java:535) bei javax.media.jai.RenderedOp.createRendering (RenderedOp.java:867) bei javax.media.jai.RenderedOp.getRendering (RenderedOp. java: 888) bei javax.media.jai.RendedOp.createInstance (RenderedOp.java:799) bei javax.media.jai.RendedOp.createRendering (RenderedOp.java:867) bei javax.media.jai.RenderedOp. copydata (RenderedOp.java:2284)
Hier ist der Code I (Sun Beispiel, glaube ich) gefunden, die zu schwarz konvertiert und weiß:
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);
Hier ist, was ich habe versucht, es zu einem BufferedImage zu konvertieren, in der Reihenfolge, ich habe versucht:
//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);
Kann mir jemand sagen, was ich falsch mache?
Ich habe festgestellt, dass selbst Aufruf dst.getNumBands()
wird diesen Fehler werfen. Klar, ich weiß nicht, was ich hier mache. Genauer gesagt ruft der Aufruf dst.betNumbBands();
dies auf:
java.lang.IllegalArgumentException: Das angegebene ColorModel ist inkompatibel mit dem Image SampleModel. bei javax.media.jai.PlanarImage.setImageLayout (PlanarImage.java:535) bei javax.media.jai.RendedOp.createRendering (RenderedOp.java:867) bei javax.media.jai.RendedOp.getRendering (RenderedOp. java: 888) bei javax.media.jai.RendedOp.createInstance (RenderedOp.java:799) bei javax.media.jai.RendedOp.createRendering (RenderedOp.java:867) bei javax.media.jai.RenderedOp. getSampleModel (RenderedOp.java:2233) bei javax.media.jai.PlanarImage.getNumBands (PlanarImage.java:678)
Fehler: BandCombine: eine Zeile der Matrix hat nicht die richtige Anzahl von Einträgen. –