I was working on simply grabbing a pixel from an image using inner java API. One of the problems I stumbled upon was matching a AWT color to a JME ColorRGBA. I eventually figured out the problem after some googling yet this not the initial problems I am facing. The point is I have a Image with a Schematic of a 2D Rectangle that was created in any Image Processing Application. So a BLUE SQAURE would be the location of a 3D Rectangle. After reading an Image from ImageIO from FILE than scanning each pixel in the corresponding color. If the pixel is BLUE than RENDER CUBE.
This would be the basis of the Terrain Object Generation. I been surfing the net for answers and help on my project. Here is some Code ::
import java.awt.Color;
import java.awt.Image;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferByte;
import java.awt.image.PixelGrabber;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Field;
import javax.imageio.ImageIO;
import com.jme3.app.SimpleApplication;
import com.jme3.material.Material;
import com.jme3.math.ColorRGBA;
import com.jme3.math.Vector3f;
import com.jme3.scene.Geometry;
import com.jme3.scene.Spatial;
import com.jme3.scene.shape.Box;
import com.jme3.system.AppSettings;
public class zMod extends SimpleApplication{
public static String f_path = “C:/Users/null/eclipse_wk/ActOne/src/”;
public static String bp0 = "blueprint";
public static String f_type_0 = ".jpg";
public static String f_type_1 = ".png";
public static ColorRGBA c_rgba;
public static Color c_;
public static int x_ord;
public static int y_ord;
public static int x_max; // setup getter
public static int y_max;
public static Color getPixelColor(int x, int y, String locate_file) {
Color c_ = Color.white;
File file = new File(locate_file);
BufferedImage image = null;
if(image == null) {
try {
image = ImageIO.read(file);
x_max = image.getWidth();
y_max = image.getHeight();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// Getting pixel color by position x and y
int clr = image.getRGB(x, y);
int red = (clr & 0x00ff0000) >> 16;
int green = (clr & 0x0000ff00) >> 8;
int blue = clr & 0x000000ff;
c_ = new Color(red, green, blue);
System.out.println("Red Color value = " + red);
System.out.println("Green Color value = " + green);
System.out.println("Blue Color value = " + blue);
System.out.println(c_ + "--:|= rgba");
}
return c_;
}
public static ColorRGBA getPixel(int x, int y, String locate_file){
ColorRGBA c_rgba = ColorRGBA.White;
File file = new File(locate_file);
BufferedImage image = null;
if(image == null) {
try {
image = ImageIO.read(file);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// Getting pixel color by position x and y
int clr = image.getRGB(x, y);
int red = (clr & 0x00ff0000) >> 16;
int green = (clr & 0x0000ff00) >> 8;
int blue = clr & 0x000000ff;
c_rgba.set(red, green, blue , 255);
x_max = image.getWidth();
y_max = image.getHeight();
System.out.println("Red Color value = " + red);
System.out.println("Green Color value = " + green);
System.out.println("Blue Color value = " + blue);
System.out.println(c_rgba + "--:|= rgba");
}
return c_rgba;
}
public static void main(String[] args) throws IOException {
zMod zc = new zMod();
AppSettings setting = new AppSettings(true);
setting.setSettingsDialogImage("/Textures/ui/drag_splash.png");
zc.setSettings(setting);
zc.start();
}
@Override
public void simpleInitApp() {
System.out.println(":---[" + x_max + "]---:");
for(x_ord = 0; x_ord <= x_max; x_ord++) {
for(y_ord = 0; y_ord <= y_max; y_ord++) {
System.out.println("[" + x_ord + "]" +"[" + y_ord + "]:--:" + getPixel(x_ord, y_ord, (f_path + bp0 + f_type_1)));
}
}
}
@Override
public void simpleUpdate(float tpf) {
}
}
Problem I am facing is with ARRAY BUFFER OVERFLOW. Maybe ran out of RAM?
Im not sure if you all understand what my current objective is.
Scan Image → Match Color( Pixel ) → add cube at coordiante ( Pixel );
Box b = new Box(Pixel.X, 1, Pixel.Y); // create cube shape
Geometry geom = new Geometry("Box", b); // create cube geometry from the shape
Material mat = new Material(assetManager,
"Common/MatDefs/Misc/Unshaded.j3md"); // create a simple material
/*----- SET UP TEXTURE ---*/
geom.setMaterial(mat); // set the cube's material
rootNode.attachChild(geom); // make the cube appear in the scene