code: public static void getScreenShotABGR(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;
              }
          }
      }
docs: Good format for java swing.
  
  @param bgraBuf
  @param out