com.jme3.util.AndroidScreenshots Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jme3-android Show documentation
Show all versions of jme3-android Show documentation
jMonkeyEngine is a 3D game engine for adventurous Java developers
package com.jme3.util;
import android.graphics.Bitmap;
import java.nio.ByteBuffer;
import java.util.logging.Logger;
public final class AndroidScreenshots {
private static final Logger logger = Logger.getLogger(AndroidScreenshots.class.getName());
/**
* A private constructor to inhibit instantiation of this class.
*/
private AndroidScreenshots() {
}
/**
* Convert OpenGL GLES20.GL_RGBA to Bitmap.Config.ARGB_8888 and store result
* in a Bitmap
*
* @param buf ByteBuffer that has the pixel color data from OpenGL
* @param bitmapImage Bitmap to be used after converting the data
*/
public static void convertScreenShot(ByteBuffer buf, Bitmap bitmapImage) {
int width = bitmapImage.getWidth();
int height = bitmapImage.getHeight();
int size = width * height;
// Grab data from ByteBuffer as Int Array to manipulate data and send to image
int[] data = new int[size];
buf.asIntBuffer().get(data);
// convert from GLES20.GL_RGBA to Bitmap.Config.ARGB_8888
// ** need to swap RED and BLUE **
for (int idx = 0; idx < data.length; idx++) {
int initial = data[idx];
int pb = (initial >> 16) & 0xff;
int pr = (initial << 16) & 0x00ff0000;
int pix1 = (initial & 0xff00ff00) | pr | pb;
data[idx] = pix1;
}
// OpenGL and Bitmap have opposite starting points for Y axis (top vs bottom)
// Need to write the data in the image from the bottom to the top
// Use size-width to indicate start with last row and increment by -width for each row
bitmapImage.setPixels(data, size - width, -width, 0, 0, width, height);
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy