⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jaibctprocessor.java

📁 esri的ArcGIS Server超级学习模板程序(for java)
💻 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 + -