| 
									
										
										
										
											2011-03-14 12:55:32 +00:00
										 |  |  | package com.jme3.util;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-04-20 01:08:25 +00:00
										 |  |  | import com.jme3.util.*;
 | 
					
						
							| 
									
										
										
										
											2011-03-14 12:55:32 +00:00
										 |  |  | import java.awt.image.BufferedImage;
 | 
					
						
							|  |  |  | import java.awt.image.DataBufferByte;
 | 
					
						
							|  |  |  | import java.awt.image.WritableRaster;
 | 
					
						
							|  |  |  | import java.nio.ByteBuffer;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public final class Screenshots {
 | 
					
						
							|  |  |  |     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;
 | 
					
						
							|  |  |  |             }
 | 
					
						
							|  |  |  |         }
 | 
					
						
							|  |  |  |     }
 | 
					
						
							|  |  |  | }
 |