aboutsummaryrefslogtreecommitdiff
path: root/engine/src/desktop/com/jme3/util/Screenshots.java
diff options
context:
space:
mode:
Diffstat (limited to 'engine/src/desktop/com/jme3/util/Screenshots.java')
-rw-r--r--engine/src/desktop/com/jme3/util/Screenshots.java78
1 files changed, 78 insertions, 0 deletions
diff --git a/engine/src/desktop/com/jme3/util/Screenshots.java b/engine/src/desktop/com/jme3/util/Screenshots.java
new file mode 100644
index 0000000..bbb6966
--- /dev/null
+++ b/engine/src/desktop/com/jme3/util/Screenshots.java
@@ -0,0 +1,78 @@
+package com.jme3.util;
+
+import java.awt.image.BufferedImage;
+import java.awt.image.DataBufferByte;
+import java.awt.image.DataBufferInt;
+import java.awt.image.WritableRaster;
+import java.nio.ByteBuffer;
+import java.nio.IntBuffer;
+
+public final class Screenshots {
+
+ public static void convertScreenShot2(IntBuffer bgraBuf, BufferedImage out){
+ WritableRaster wr = out.getRaster();
+ DataBufferInt db = (DataBufferInt) wr.getDataBuffer();
+
+ int[] cpuArray = db.getData();
+
+ bgraBuf.clear();
+ bgraBuf.get(cpuArray);
+
+// int width = wr.getWidth();
+// int height = wr.getHeight();
+//
+// // flip the components the way AWT likes them
+// for (int y = 0; y < height / 2; y++){
+// for (int x = 0; x < width; x++){
+// int inPtr = (y * width + x);
+// int outPtr = ((height-y-1) * width + x);
+// int pixel = cpuArray[inPtr];
+// cpuArray[inPtr] = cpuArray[outPtr];
+// cpuArray[outPtr] = pixel;
+// }
+// }
+ }
+
+ public static void convertScreenShot(ByteBuffer bgraBuf, BufferedImage out){
+ WritableRaster wr = out.getRaster();
+ DataBufferByte db = (DataBufferByte) wr.getDataBuffer();
+
+ byte[] cpuArray = db.getData();
+
+ // copy native memory to java memory
+ bgraBuf.clear();
+ bgraBuf.get(cpuArray);
+ bgraBuf.clear();
+
+ int width = wr.getWidth();
+ int height = wr.getHeight();
+
+ // flip the components the way AWT likes them
+ for (int y = 0; y < height / 2; y++){
+ for (int x = 0; x < width; x++){
+ int inPtr = (y * width + x) * 4;
+ int outPtr = ((height-y-1) * width + x) * 4;
+
+ byte b1 = cpuArray[inPtr+0];
+ byte g1 = cpuArray[inPtr+1];
+ byte r1 = cpuArray[inPtr+2];
+ byte a1 = cpuArray[inPtr+3];
+
+ byte b2 = cpuArray[outPtr+0];
+ byte g2 = cpuArray[outPtr+1];
+ byte r2 = cpuArray[outPtr+2];
+ byte a2 = cpuArray[outPtr+3];
+
+ cpuArray[outPtr+0] = a1;
+ cpuArray[outPtr+1] = b1;
+ cpuArray[outPtr+2] = g1;
+ cpuArray[outPtr+3] = r1;
+
+ cpuArray[inPtr+0] = a2;
+ cpuArray[inPtr+1] = b2;
+ cpuArray[inPtr+2] = g2;
+ cpuArray[inPtr+3] = r2;
+ }
+ }
+ }
+}