?? jaibctprocessor.java
字號:
package com.esri.solutions.jitk.web.data.image;
import com.sun.media.jai.codec.PNGDecodeParam;
import com.sun.media.jai.codec.SeekableStream;
import org.apache.log4j.Logger;
import java.awt.image.RenderedImage;
import java.awt.image.renderable.ParameterBlock;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.media.jai.JAI;
public class JAIBCTProcessor implements IBCTProcessor {
private static final Logger _logger = Logger.getLogger(JAIBCTProcessor.class);
private byte m_brightness;
private byte m_contrast;
private TintParameters m_tint;
private InputStream m_imageIn;
private String m_format;
public JAIBCTProcessor() {
BCTOpDescriptor.register();
}
public InputStream process() throws IOException {
if (m_imageIn == null) {
throw new IllegalStateException();
}
if (m_format.equalsIgnoreCase("GIF")) {
_logger.info(
"Java Advanced Imaging does not support GIF encoding, only decoding. Unable to apply brightness, contrast, and tint settings. Returning unmodified image.");
return m_imageIn;
} else if (m_format.equalsIgnoreCase("PNG8")) {
_logger.info(
"Java Advanced Imaging does not support PNG8 image format. Unable to apply brightness, contrast, and tint settings. Returning unmodified image.");
return m_imageIn;
}
RenderedImage img = decodeImage();
ParameterBlock pb = new ParameterBlock();
pb.addSource(img);
pb.add(new Byte(m_brightness));
pb.add(new Byte(m_contrast));
pb.add(m_tint);
img = JAI.create("bct", pb);
return encodeImage(img);
}
public void setBrightness(byte b) {
m_brightness = b;
}
public void setContrast(byte c) {
m_contrast = c;
}
public void setTint(TintParameters tint) {
m_tint = tint;
}
public void setImageInputStream(InputStream imageIn) {
if (imageIn == null) {
throw new NullPointerException();
}
m_imageIn = imageIn;
}
public void setImageFormat(String format) {
if (format == null) {
throw new NullPointerException();
}
m_format = format;
}
private RenderedImage decodeImage() {
if (m_format.equalsIgnoreCase("PNG")) {
return decodePNGImage();
} else {
SeekableStream stream = createSeekableStream();
return JAI.create("stream", stream);
}
}
private RenderedImage decodePNGImage() {
SeekableStream stream = createSeekableStream();
PNGDecodeParam param = new PNGDecodeParam();
param.setExpandPalette(true);
return JAI.create(m_format, stream, param);
}
private SeekableStream createSeekableStream() {
return SeekableStream.wrapInputStream(m_imageIn, true);
}
private InputStream encodeImage(RenderedImage img)
throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
ParameterBlock pb = new ParameterBlock();
pb.addSource(img);
pb.add(out);
if (m_format.equalsIgnoreCase("JPG")) {
pb.add("JPEG");
} else {
pb.add(m_format);
}
JAI.create("encode", pb);
out.close();
ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
return in;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -