bctopimage.java

来自「esri的ArcGIS Server超级学习模板程序(for java)」· Java 代码 · 共 87 行

JAVA
87
字号
package com.esri.solutions.jitk.web.data.image;

import java.awt.image.Raster;
import java.awt.image.RenderedImage;
import java.awt.image.WritableRaster;
import java.util.Map;

import javax.media.jai.ImageLayout;
import javax.media.jai.PointOpImage;

@SuppressWarnings("unchecked")
public class BCTOpImage extends PointOpImage {

	private byte m_brightness;
	private byte m_contrast;
	private TintParameters m_tint;
	private RenderedImage m_source;
	private double[] m_mean;
	
	public BCTOpImage(RenderedImage img, 
					  ImageLayout layout, 
					  Map config,
					  boolean cobbleSources) {
		super(img, layout, config, cobbleSources);
		m_source = img;
	}
	
	public void setBrightness (byte b) {
		m_brightness = b;
	}
	
	public void setContrast (byte c) {
		m_contrast = c;
	}
	
	public void setTintParameters (TintParameters tint) {
		m_tint = tint;
	}

	public void setMean (double[] mean) {
		m_mean = mean;
	}
	
	@Override
	public Raster computeTile(int tileX, int tileY) {
		WritableRaster raster = null;
		Raster tile = null;
		
		tile = m_source.getTile(tileX, tileY);
		raster = tile.createCompatibleWritableRaster(tile.getMinX(), 
													 tile.getMinY(), 
													 tile.getWidth(), 
													 tile.getHeight());
		double[] pixel = new double[tile.getNumBands()];
		byte[] tint = new byte[tile.getNumBands()];
		
		if (m_tint == null) {
			for (int i = 0; i < tint.length; i++) {
				tint[i] = 0;
			}
		} else {
			tint[0] = m_tint.getRedOffset();
			tint[1] = m_tint.getGreenOffset();
			tint[2] = m_tint.getBlueOffset();
			if (tint.length > 3) {
				tint[3] = 0;
			}
		}
		
		for (int i = 0; i < tile.getWidth(); i++) {
			for (int j = 0; j < tile.getHeight(); j++) {
				pixel = tile.getPixel(i + tile.getMinX(), j + tile.getMinY(), pixel);
				
				for (int k = 0; k < pixel.length; k++) {
					
					pixel[k] = (m_mean[k] + (pixel[k] - m_mean[k]) * m_contrast) + m_brightness + tint[k];
					pixel[k] = Math.min(255, Math.max(0, pixel[k]));
				}
					
				raster.setPixel(i + tile.getMinX(), j + tile.getMinY(), pixel);
			}
		}
		
		return raster;
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?