Skip to content
Snippets Groups Projects
Commit a44f2386 authored by Brutzman, Don's avatar Brutzman, Don
Browse files

add javadoc

parent 00475428
No related branches found
No related tags found
No related merge requests found
/*
* PixelTextureGenerator.java
* http://web.nps.navy.mil/~brutzman/Savage/Tools/Authoring/PixelTextureGenerator.java
* https://savage.nps.edu/Savage/Tools/Authoring/PixelTextureGenerator.java
* Created on June 10, 2004, 12:24 AM
* Modified on June 17, 2004, 1:46 AM
......@@ -9,15 +8,15 @@
* Revised 4 January 2006, Don Brutzman
* Revised 3 January 2007, Don Brutzman
* Revised 10 November 2018, Don Brutzman
* Revised 14 June 2020, Don Brutzman
*/
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
/**
*
* Generate X3D PixelTexture values.
* @author Louis Gutierrez
* @author Don Brutzman
* References:
......@@ -27,90 +26,98 @@ import java.io.*;
public class PixelTextureGenerator extends Frame
{
private Image image;
private File outputFile;
private FileWriter out;
private int height, width;
private String outputFilename;
private Image image;
private File outputFile;
private FileWriter out;
private int height, width;
private String outputFilename;
static String UsageMessage = "usage: java PixelTextureGenerator imageName.ext [outputSceneName.x3d]";
static String UsageMessage = "usage: java PixelTextureGenerator imageName.ext [outputSceneName.x3d]";
public PixelTextureGenerator(String imageFilename, String pOutputFilename) throws IOException
{
try
{
String name = "";
Toolkit toolkit = Toolkit.getDefaultToolkit();
image = toolkit.getImage(imageFilename);
MediaTracker mediaTracker = new MediaTracker(this);
mediaTracker.addImage(image, 0);
try
{
mediaTracker.waitForID(0); //makes sure image loads
}
catch (InterruptedException ie)
{
System.err.println(ie);
System.exit(1);
}
//string manipulation for output file and header
name = imageFilename.substring(imageFilename.lastIndexOf("\\")+1,imageFilename.lastIndexOf("."));
if (pOutputFilename.length() == 0)
{
outputFilename = name + "PixelTexture.x3d";
}
else outputFilename = pOutputFilename;
try
{
String name = "";
Toolkit toolkit = Toolkit.getDefaultToolkit();
image = toolkit.getImage(imageFilename);
MediaTracker mediaTracker = new MediaTracker(this);
mediaTracker.addImage(image, 0);
try
{
mediaTracker.waitForID(0); //makes sure image loads
}
catch (InterruptedException ie)
{
System.err.println(ie);
System.exit(1);
}
// string manipulation for output file and header
name = imageFilename.substring(imageFilename.lastIndexOf("\\")+1,imageFilename.lastIndexOf("."));
if (pOutputFilename.length() == 0)
{
outputFilename = name + "PixelTexture.x3d";
}
else outputFilename = pOutputFilename;
// System.out.println ("[outputFilename=" + outputFilename + "]");
// System.out.println ("[outputFilename=" + outputFilename + "]");
System.out.print ("..");
outputFile = new File( outputFilename );
out = new FileWriter( outputFile );
System.out.print (".");
System.out.print ("..");
outputFile = new File( outputFilename );
out = new FileWriter( outputFile );
System.out.print (".");
width = image.getWidth (null);
height = image.getHeight(null);
header(outputFilename, imageFilename, width, height);
handlePixels(image, 0, 0, width, height);
footer(width, height);
System.out.println ("created " + outputFile);
}
catch (Exception e)
{
System.err.println(e);
System.exit(1);
}
width = image.getWidth (null);
height = image.getHeight(null);
header(outputFilename, imageFilename, width, height);
handlePixels(image, 0, 0, width, height);
footer(width, height);
System.out.println ("created " + outputFile);
}
catch (IOException ioe)
{
System.err.println(ioe);
System.exit(1);
}
}
/**
* This method uses pixelGrabber to grab pixels from an image and then each pixel is
* manipulated into a hex string and written to file.
*/
public void handlePixels(Image img, int x, int y, int imageWidth, int imageHeight) throws IOException
/**
* This method uses pixelGrabber to grab pixels from an image and then each
* pixel is manipulated into a hex string and written to file.
*
* @param inputImage image of interest
* @param x initial x pixel coordinate of interest
* @param y initial y pixel coordinate of interest
* @param imageWidth image width in pixels
* @param imageHeight image height in pixels
*/
public void handlePixels(Image inputImage, int x, int y, int imageWidth, int imageHeight) throws IOException
{
try
{
out.write(imageWidth + " " + imageHeight + " " + "3 "); //default is 256*256*256 colors
out.write("\n");
int[] pixels = new int[imageWidth * imageHeight]; //array of pixels to grab
PixelGrabber pg = new PixelGrabber(img, x, y, imageWidth, imageHeight, pixels, 0, imageWidth);
PixelGrabber pixelGrabber = new PixelGrabber(inputImage, x, y, imageWidth, imageHeight, pixels, 0, imageWidth);
try {
pg.grabPixels();
pixelGrabber.grabPixels();
} catch (InterruptedException e) {
System.err.println("[Error] interrupted waiting for pixels!");
return;
}
if ((pg.getStatus() & ImageObserver.ABORT) != 0) {
if ((pixelGrabber.getStatus() & ImageObserver.ABORT) != 0)
{
System.err.println("[Error] image fetch abort or error");
return;
}
//cycles through the array of pixels
// SFImage: Pixels are specified from left to right, bottom to top
// for (int j = 0; j < imageHeight; j++) {
for (int j = imageHeight - 1; j >= 0; j--) {
for (int i = 0; i < imageWidth; i++) {
for (int j = imageHeight - 1; j >= 0; j--)
{
for (int i = 0; i < imageWidth; i++)
{
handleSinglePixel(x+i, y+j, pixels[j * imageWidth + i]);
}
// break long lines of pixels for countability and to help some parsers/editors
......@@ -118,18 +125,24 @@ public class PixelTextureGenerator extends Frame
}
out.flush();
}
catch (Exception e)
catch (IOException e)
{
System.err.println (e);
}
}
/**
* This method translates the integer value passed by pixeGrabber into
* alpha, red, green, and blue. It then converts these integers to a hex
* string.
*/
public void handleSinglePixel(int x, int y, int pixel) throws IOException{
/**
* This method translates the integer value passed by pixeGrabber into
* alpha, red, green, and blue.It then converts these integers to a hex
* string.
*
* @param x x pixel coordinate of interest
* @param y y pixel coordinate of interest
* @param pixel pixel value
* @throws java.io.IOException file exception
*/
public void handleSinglePixel(int x, int y, int pixel) throws IOException
{
//translates pixel integer
int alpha = (pixel >> 24) & 0xff;
int red = (pixel >> 16) & 0xff;
......@@ -140,11 +153,17 @@ public class PixelTextureGenerator extends Frame
hexConverter(red,green, blue);
}
/**
* This method produces a string that represents a 6 digit hex value
* and writes it to file.
*/
public void hexConverter(int r,int g,int b) throws IOException{
/**
* This method produces a string that represents a 6 digit hex value and
* writes it to file.
*
* @param r red value
* @param g green value
* @param b blue value
* @throws java.io.IOException file exception
*/
public void hexConverter(int r, int g, int b) throws IOException
{
String temp = "0x";
temp += hexCase(r/16);
......@@ -159,41 +178,48 @@ public class PixelTextureGenerator extends Frame
}
/**
* pThis method simply changes standard form into hex
* This method simply changes standard form into hex
*/
public char hexCase(int c) {
public char hexCase (int c)
{
char out='Z';
switch (c) {
case 0: out = '0'; break;
case 1: out = '1'; break;
case 2: out = '2'; break;
case 3: out = '3'; break;
case 4: out = '4'; break;
case 5: out = '5'; break;
case 6: out = '6'; break;
case 7: out = '7'; break;
case 8: out = '8'; break;
case 9: out = '9'; break;
case 10: out = 'A'; break;
case 11: out = 'B'; break;
case 12: out = 'C'; break;
case 13: out = 'D'; break;
case 14: out = 'E'; break;
case 15: out = 'F'; break;
default: System.out.println("incorrect color value");
}
switch (c) {
case 0: out = '0'; break;
case 1: out = '1'; break;
case 2: out = '2'; break;
case 3: out = '3'; break;
case 4: out = '4'; break;
case 5: out = '5'; break;
case 6: out = '6'; break;
case 7: out = '7'; break;
case 8: out = '8'; break;
case 9: out = '9'; break;
case 10: out = 'A'; break;
case 11: out = 'B'; break;
case 12: out = 'C'; break;
case 13: out = 'D'; break;
case 14: out = 'E'; break;
case 15: out = 'F'; break;
default: System.out.println("incorrect color value");
}
return out;
}
/**
* This method writes the header information to file
*/
/**
* This method writes the header information to file
*
* @param outputFileName
* @param imageFilename
* @param x initial x pixel coordinate of interest
* @param y initial y pixel coordinate of interest
* @throws java.io.IOException file exception
*/
public void header(String outputFileName, String imageFilename, int x, int y) throws IOException{
out.write("<?xml version='1.0' encoding='UTF-8'?>\n");
// final DOCTYPE
out.write("<!DOCTYPE X3D PUBLIC \"ISO//Web3D//DTD X3D 3.1//EN\" \"http://www.web3d.org/specifications/x3d-3.1.dtd\">\n");
out.write("<X3D version='3.1' profile='Interactive'\n");
out.write(" xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation='http://www.web3d.org/specifications/x3d-3.0.xsd'>\n");
out.write("<!DOCTYPE X3D PUBLIC \"ISO//Web3D//DTD X3D 3.3//EN\" \"http://www.web3d.org/specifications/x3d-3.3.dtd\">\n");
out.write("<X3D version='3.3' profile='Interactive'\n");
out.write(" xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation='http://www.web3d.org/specifications/x3d-3.3.xsd'>\n");
out.write(" <head>\n");
out.write(" <meta content='" + outputFileName + "' name='title'/>\n");
out.write(" <meta content='" + imageFilename + "' name='image'/>\n");
......@@ -280,6 +306,5 @@ public class PixelTextureGenerator extends Frame
System.out.println (UsageMessage);
System.exit (-1);
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment