Muszę przeskalować obraz za pomocą Java JAI. W chwili obecnie używam następujący kod:Skalowanie obrazów za pomocą Java JAI
private static RenderedOp scale(RenderedOp image, float scale) {
ParameterBlock scaleParams = new ParameterBlock();
scaleParams.addSource(image);
scaleParams.add(scale).add(scale).add(0.0f).add(0.0f);
scaleParams.add(Interpolation.getInstance(Interpolation.INTERP_BICUBIC_2));
// Quality related hints when scaling the image
RenderingHints scalingHints = new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
scalingHints.put(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
scalingHints.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
scalingHints.put(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
scalingHints.put(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_ENABLE);
scalingHints.put(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
scalingHints.put(JAI.KEY_BORDER_EXTENDER, BorderExtender.createInstance(BorderExtender.BORDER_COPY));
return JAI.create("scale", scaleParams, scalingHints);
}
Niestety, prowadzi to do bardzo złe wyniki, zwłaszcza dlatego, że często muszą skalować obrazy ze współczynnikiem skali mniejszej niż 0,5 ...
Any Rada?
Ta linia wygląda podejrzane skalaParams.add (skala) .add (skala) .add (0.0f) .add (0.0f); – whatnick
Niektóre przykładowe wyniki, które ilustrują, co masz na myśli przez złe, pomogą również w zidentyfikowaniu rodzaju artefaktu, którego doświadczasz. – whatnick
Jakieś powody, by nie używać 'AffineTransformOp'? Zobacz także http://stackoverflow.com/questions/4216635 – trashgod