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

📄 bctopimage.java

📁 esri的ArcGIS Server超级学习模板程序(for java)
💻 JAVA
字号:
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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -