A complete 3D game development suite written purely in Java.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
jmonkeyengine/jme3-examples/src/main/java/jme3test/texture/TestImageRaster.java

162 lines
6.0 KiB

package jme3test.texture;
import com.jme3.app.SimpleApplication;
import com.jme3.font.BitmapFont;
import com.jme3.font.BitmapText;
import com.jme3.font.Rectangle;
import com.jme3.material.Material;
import com.jme3.math.ColorRGBA;
import com.jme3.math.Vector3f;
import com.jme3.renderer.queue.RenderQueue;
import com.jme3.scene.Geometry;
import com.jme3.scene.shape.Quad;
import com.jme3.texture.Image;
import com.jme3.texture.Image.Format;
import com.jme3.texture.Texture;
import com.jme3.texture.Texture.MagFilter;
import com.jme3.texture.Texture.MinFilter;
import com.jme3.texture.Texture2D;
import com.jme3.texture.image.ColorSpace;
import com.jme3.texture.image.ImageRaster;
import com.jme3.util.BufferUtils;
import java.nio.ByteBuffer;
public class TestImageRaster extends SimpleApplication {
private Image convertImage(Image image, Format newFormat) {
int width = image.getWidth();
int height = image.getHeight();
ByteBuffer data = BufferUtils.createByteBuffer( (int)Math.ceil(newFormat.getBitsPerPixel() / 8.0) * width * height);
Image convertedImage = new Image(newFormat, width, height, data,null, image.getColorSpace());
ImageRaster sourceReader = ImageRaster.create(image);
ImageRaster targetWriter = ImageRaster.create(convertedImage);
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
ColorRGBA color = sourceReader.getPixel(x, y);
targetWriter.setPixel(x, y, color);
}
}
return convertedImage;
}
private void convertAndPutImage(Image image, float posX, float posY) {
Texture tex = new Texture2D(image);
tex.setMagFilter(MagFilter.Nearest);
tex.setMinFilter(MinFilter.NearestNoMipMaps);
tex.setAnisotropicFilter(16);
Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
mat.setTexture("ColorMap", tex);
Quad q = new Quad(5, 5);
Geometry g = new Geometry("quad", q);
g.setLocalTranslation(posX, posY - 5, -0.0001f);
g.setMaterial(mat);
rootNode.attachChild(g);
BitmapFont fnt = assetManager.loadFont("Interface/Fonts/Default.fnt");
BitmapText txt = new BitmapText(fnt);
txt.setBox(new Rectangle(0, 0, 5, 5));
txt.setQueueBucket(RenderQueue.Bucket.Transparent);
txt.setSize(0.5f);
txt.setText(image.getFormat().name());
txt.setLocalTranslation(posX, posY, 0);
rootNode.attachChild(txt);
}
private Image createTestImage() {
Image testImage = new Image(Format.BGR8, 4, 3, BufferUtils.createByteBuffer(4 * 4 * 3), null, ColorSpace.Linear);
ImageRaster io = ImageRaster.create(testImage);
io.setPixel(0, 0, ColorRGBA.Black);
io.setPixel(1, 0, ColorRGBA.Gray);
io.setPixel(2, 0, ColorRGBA.White);
io.setPixel(3, 0, ColorRGBA.White.mult(4)); // HDR color
io.setPixel(0, 1, ColorRGBA.Red);
io.setPixel(1, 1, ColorRGBA.Green);
io.setPixel(2, 1, ColorRGBA.Blue);
io.setPixel(3, 1, new ColorRGBA(0, 0, 0, 0));
io.setPixel(0, 2, ColorRGBA.Yellow);
io.setPixel(1, 2, ColorRGBA.Magenta);
io.setPixel(2, 2, ColorRGBA.Cyan);
io.setPixel(3, 2, new ColorRGBA(1, 1, 1, 0));
return testImage;
}
@Override
public void simpleInitApp() {
cam.setLocation(new Vector3f(16, 6, 36));
flyCam.setMoveSpeed(10);
Texture tex = assetManager.loadTexture("com/jme3/app/Monkey.png");
// Texture tex = assetManager.loadTexture("Textures/HdrTest/Memorial.hdr");
Image originalImage = tex.getImage();
Image image = convertImage(originalImage, Format.RGBA32F);
convertAndPutImage(image, 0, 0);
image = convertImage(image, Format.RGB32F);
convertAndPutImage(image, 5, 0);
image = convertImage(image, Format.RGBA16F);
convertAndPutImage(image, 10, 0);
image = convertImage(image, Format.RGB16F);
convertAndPutImage(image, 15, 0);
image = convertImage(image, Format.RGB16F_to_RGB9E5);
convertAndPutImage(image, 20, 0);
image = convertImage(image, Format.RGB16F_to_RGB111110F);
convertAndPutImage(image, 25, 0);
image = convertImage(image, Format.RGBA8);
convertAndPutImage(image, 10, 5);
image = convertImage(image, Format.RGB8);
convertAndPutImage(image, 15, 5);
image = convertImage(image, Format.ABGR8);
convertAndPutImage(image, 20, 5);
image = convertImage(image, Format.BGR8);
convertAndPutImage(image, 25, 5);
image = convertImage(image, Format.ARGB8);
convertAndPutImage(image, 30, 5);
image = convertImage(image, Format.BGRA8);
convertAndPutImage(image, 35, 5);
image = convertImage(image, Format.RGB5A1);
convertAndPutImage(image, 0, 10);
image = convertImage(image, Format.RGB565);
convertAndPutImage(image, 5, 10);
image = convertImage(image, Format.Luminance32F);
convertAndPutImage(image, 0, 15);
image = convertImage(image, Format.Luminance16FAlpha16F);
convertAndPutImage(image, 5, 15);
image = convertImage(image, Format.Luminance16F);
convertAndPutImage(image, 10, 15);
image = convertImage(image, Format.Luminance8Alpha8);
convertAndPutImage(image, 15, 15);
image = convertImage(image, Format.Luminance8);
convertAndPutImage(image, 20, 15);
}
public static void main(String[] args) {
TestImageRaster app = new TestImageRaster();
app.start();
}
}