imageconsumerint.java

来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· Java 代码 · 共 107 行

JAVA
107
字号
/*
 * $Id: ImageConsumerInt.java,v 1.1 2003/11/25 11:51:39 epr Exp $
 */
package org.jnode.awt.image;

import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.image.ColorModel;

import org.apache.log4j.Logger;
import org.jnode.system.MemoryResource;

/**
 * Image consumer that copies pixels of 32-bit to the destination.
 * 
 * @author epr
 */
public class ImageConsumerInt extends AbstractMemoryImageConsumer {

	/** My logger */
	private final Logger log = Logger.getLogger(getClass());

	/**
	 * @param target
	 * @param targetDimension
	 * @param dest
	 * @param bytesPerLine 
	 */
	public ImageConsumerInt(MemoryResource target, Dimension targetDimension, Rectangle dest, int bytesPerLine) {
		super(target, targetDimension, dest, bytesPerLine);
	}

	/**
	 * @param target
	 * @param targetW
	 * @param targetH
	 * @param destX
	 * @param destY
	 * @param destW
	 * @param destH
	 * @param bytesPerLine
	 */
	public ImageConsumerInt(MemoryResource target, int targetW, int targetH, int destX, int destY, int destW, int destH, int bytesPerLine) {
		super(target, targetW, targetH, destX, destY, destW, destH, bytesPerLine);
	}

	/**
	 * @param x
	 * @param y
	 * @param w
	 * @param h
	 * @param model
	 * @param pixels
	 * @param offset
	 * @param scansize
	 * @see java.awt.image.ImageConsumer#setPixels(int, int, int, int, java.awt.image.ColorModel, byte[], int, int)
	 */
	public void setPixels(int x, int y, int w, int h, ColorModel model, byte[] pixels, int offset, int scansize) {
		log.debug("setPixel byte[] " + x + "," + y + "," + w + "," + h);
		w = Math.max(0, Math.min(w, targetWidth - (destX + x)));
		h = Math.max(0, Math.min(h, targetHeight - (destY + y)));
		for (int row = 0; row < h; row++) {
			// Offset within pixels
			final int rowOfs = (row * scansize) + offset;
			// Offset in target
			final int dstPtr = ((y + destY + row) * bytesPerLine) + ((destX + x) << 2);
			
			for (int col = 0; col < w; col++) {
				final int bytePixel = pixels[rowOfs + col];
				final int intPixel;
				if (model != null) {
					intPixel = model.getRGB(bytePixel);
				} else {
					intPixel = bytePixel;
				}
				target.setInt(dstPtr + (col << 2), intPixel);
			}
		}				
	}

	/**
	 * @param x
	 * @param y
	 * @param w
	 * @param h
	 * @param model
	 * @param pixels
	 * @param offset
	 * @param scansize
	 * @see java.awt.image.ImageConsumer#setPixels(int, int, int, int, java.awt.image.ColorModel, int[], int, int)
	 */
	public void setPixels(int x, int y, int w, int h, ColorModel model, int[] pixels, int offset, int scansize) {
		log.debug("setPixel int[] " + x + "," + y + "," + w + "," + h);
		w = Math.max(0, Math.min(w, targetWidth - (destX + x)));
		h = Math.max(0, Math.min(h, targetHeight - (destY + y)));
		log.debug("w=" + w + ", h=" + h);
		for (int row = 0; row < h; row++) {
			// Offset within pixels
			final int rowOfs = (row * scansize) + offset;
			// Offset in target
			final int dstPtr = ((y + destY + row) * bytesPerLine) + ((destX + x) << 2);
			target.setInts(pixels, rowOfs, dstPtr, w);
		}				
	}

}

⌨️ 快捷键说明

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