| 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; |
| } |
| } |
| } |
| } |