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.
162 lines
6.0 KiB
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();
|
|
}
|
|
}
|
|
|