Java tutorial
/** * Copyright 2012 Tobias Gierke <tobias.gierke@code-sourcery.de> * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package de.codesourcery.jasm16.emulator.devices.impl; import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; import java.awt.image.DataBufferInt; import java.awt.image.DirectColorModel; import java.awt.image.Raster; import java.awt.image.SampleModel; import java.awt.image.WritableRaster; import java.util.HashSet; import java.util.Set; import org.apache.commons.lang.ArrayUtils; /** * 24-bit RGB iamge backed by a <code>IntegerInterleavedRaster</code>. * * @author tobias.gierke@code-sourcery.de */ public final class RawImage { private final BufferedImage image; private final int[] data; public RawImage(int width, int height) { data = new int[width * height]; final DataBufferInt dataBuffer = new DataBufferInt(data, width * height); final ColorModel cm = new DirectColorModel(24, 0xff0000, 0xff00, 0xff); final SampleModel sm = cm.createCompatibleSampleModel(width, height); final WritableRaster wr = Raster.createWritableRaster(sm, dataBuffer, null); image = new BufferedImage(cm, wr, false, null); } public int[] getUniqueColors() { final Set<Integer> result = new HashSet<Integer>(); for (int i = 0; i < data.length; i++) { result.add(data[i]); } return ArrayUtils.toPrimitive(result.toArray(new Integer[result.size()])); } public void fill(Color fillColor) { getGraphics().setColor(fillColor); getGraphics().fillRect(0, 0, getWidth(), getHeight()); } public int getWidth() { return image.getWidth(); } public int getHeight() { return image.getHeight(); } public BufferedImage getImage() { return image; } public Graphics2D getGraphics() { return (Graphics2D) image.getGraphics(); } public int[] getBackingArray() { return data; } }