//-----------------------------------------------------------------------//
// //
// T e s t I m a g e 2 //
// //
// Copyright (C) Herve Bitteur 2000-2007. All rights reserved. //
// This software is released under the terms of the GNU General Public //
// License. Please contact the author at herve.bitteur@laposte.net //
// to report bugs & suggestions. //
//-----------------------------------------------------------------------//
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.awt.image.DataBuffer;
import java.awt.image.DataBufferByte;
import java.awt.image.Raster;
import java.awt.image.RenderedImage;
import java.awt.image.WritableRaster;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class TestImage2
extends JPanel
{
//RenderedImage image;
RenderedImage image;
// Affine tranform
final float ratio = 1f;
AffineTransform scaleXform = AffineTransform.getScaleInstance(ratio, ratio);
private static char WHITE = '-'; // And transparent
private static char[] charTable = new char[]
{
'#', // 0 Black
'$', // 1
'*', // 2
'0', // 3
'o', // 4
'+', // 5
'.', // 6
WHITE // 7
};
//------------//
// TestImage2 //
//------------//
public TestImage2()
{
JFrame frame = new JFrame(getClass().getName());
Container pane = frame.getContentPane();
pane.setLayout(new BorderLayout());
pane.add(this);
image = toRenderedImage(new String[] {
"-##########################################################################-",
"----------------------------------------------------------------------------",
"-##########################################################################-",
"----------------------------------------------------------------------------",
"-##########################################################################-",
"----------------------------------------------------------------------------",
"-##########################################################################-",
"----------------------------------------------------------------------------",
"-##########################################################################-",
"----------------------------------------------------------------------------",
"-##########################################################################-",
"----------------------------------------------------------------------------",
"----------------------------------------------------------------------------",
"----------------------------------------------------------------------------",
"----####---------------####---------------####---------------####-----------",
"--------##-----------------##-----------------##-----------------##---------",
"----------####---------------####---------------####---------------####-----",
"--------------#------------------#------------------#------------------#----",
"--------------#------------------#------------------#------------------#----",
"----------------------------------------------------------------------------",
"---#############------#############------#############------#############---",
"---#############------#############------#############------#############---",
"---#############------#############------#############------#############---",
"---#############------#############------#############------#############---",
"---#############------#############------#############------#############---",
"---#############------#############------#############------#############---",
"---#############------#############------#############------#############---",
"---#############------#############------#############------#############---",
"---#############------#############------#############------#############---",
"---#############------#############------#############------#############---",
"---#############------#############------#############------#############---",
"----------------------------------------------------------------------------",
"----------------------------------------------------------------------------",
"----####---------------####---------------####---------------####-----------",
"--------##-----------------##-----------------##-----------------##---------",
"----------####---------------####---------------####---------------####-----",
"--------------#------------------#------------------#------------------#----",
"--------------#------------------#------------------#------------------#----",
"----------------------------------------------------------------------------",
"---#############------#############------#############------#############---",
"---#############------#############------#############------#############---",
"----------------------------------------------------------------------------",
"----------------------------------------------------------------------------"
});
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocation(100, 100);
frame.pack();
frame.setSize(200, 200);
frame.setVisible(true);
}
//------//
// main //
//------//
public static void main(String... args)
{
new TestImage2();
}
//----------------//
// paintComponent //
//----------------//
public void paintComponent(Graphics g)
{
// For background
super.paintComponent(g);
// Meant for visual check
if (image != null) {
Graphics2D g2 = (Graphics2D) g;
g2.drawRenderedImage (image, scaleXform);
//g2.drawImage (image, 1, 1, this);
}
}
//-----------------//
// toRenderedImage //
//-----------------//
public static RenderedImage toRenderedImage (String[] rows)
{
// Create the DataBuffer to hold the pixel samples
final int width = rows[0].length();
final int height = rows.length;
final int size = width * height;
byte[] pixels = new byte[size];
int index = 0;
for (String row : rows) {
for (int x = 0; x < width; x++) {
pixels[index++] = (byte) decodeGray(row.charAt(x));
}
}
DataBuffer dataBuffer = new DataBufferByte(pixels, size);
// Create Raster
WritableRaster writableRaster = Raster.createBandedRaster
(dataBuffer, width, height,
width, // scanlineStride
new int[] {0}, // bankIndices,
new int[] {0}, // bandOffsets,
null); // location
// Create the image
BufferedImage bufferedImage = new BufferedImage
(width, height, BufferedImage.TYPE_BYTE_GRAY);
bufferedImage.setData(writableRaster);
return bufferedImage;
}
//------------//
// decodeGray //
//------------//
private static int decodeGray(char c)
{
// Check the char
if (c == WHITE) {
return 255;
} else {
for (int i = charTable.length -1; i >= 0; i--) {
if (charTable[i] == c) {
int level = 2 + i * 36; // Range 2 .. 254 (not too bad)
return level;
}
}
}
// Unknown -> white
return 255;
}
}
|