2012-12-11 2 views
0

근본적으로 나는 LWJGL로 잠시 동안 어지럽 혔고, 나는 갑작스런 어색함을 가지고 주위에 괴롭힘을 당했다. glReadPixels().
왜 왼쪽 하단 -> 오른쪽 상단에서만 읽을 수 있습니까?
나는이 모든 것들을 알아 낸 이래로 내 자신의 질문에 대답하려고 여기에 있습니다.
그리고 내 발견이 다른 누군가에게 유용 할 수 있기를 바라고 있습니다.LWJGL을 사용하여 간단한 스크린 샷 방법을 만드는 방법은 무엇입니까?

glOrtho(0, WIDTH, 0 , HEIGHT, 1, -1); 

답변

2

그래서 여기가 어떤 LWJGL 응용 프로그램의 C에서 구현 될 수 내 화면 캡처 코드입니다 :이 희망

//=========================getScreenImage==================================// 
    private void screenShot(){ 
      //Creating an rbg array of total pixels 
      int[] pixels = new int[WIDTH * HEIGHT]; 
      int bindex; 
      // allocate space for RBG pixels 
      ByteBuffer fb = ByteBuffer.allocateDirect(WIDTH * HEIGHT * 3); 

      // grab a copy of the current frame contents as RGB 
      glReadPixels(0, 0, WIDTH, HEIGHT, GL_RGB, GL_UNSIGNED_BYTE, fb); 

      BufferedImage imageIn = new BufferedImage(WIDTH, HEIGHT,BufferedImage.TYPE_INT_RGB); 
      // convert RGB data in ByteBuffer to integer array 
      for (int i=0; i < pixels.length; i++) { 
       bindex = i * 3; 
       pixels[i] = 
        ((fb.get(bindex) << 16)) + 
        ((fb.get(bindex+1) << 8)) + 
        ((fb.get(bindex+2) << 0)); 
      } 
      //Allocate colored pixel to buffered Image 
      imageIn.setRGB(0, 0, WIDTH, HEIGHT, pixels, 0 , WIDTH); 

      //Creating the transformation direction (horizontal) 
      AffineTransform at = AffineTransform.getScaleInstance(1, -1); 
      at.translate(0, -imageIn.getHeight(null)); 

      //Applying transformation 
      AffineTransformOp opRotated = new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR); 
      BufferedImage imageOut = opRotated.filter(imageIn, null); 

      try {//Try to screate image, else show exception. 
       ImageIO.write(imageOut, format , fileLoc); 
      } 
      catch (Exception e) { 
       System.out.println("ScreenShot() exception: " +e); 
      } 
     } 

내가 사용하고 사이드 참고로


유용했습니다.
코드에 대한 질문이나 의견이 있으면 원하는대로/제안하십시오. C :
Hugs,
로즈.

1

늦게 답변을 드려 죄송합니다. 그러나 아직 해결책을 찾고있는 분을위한 것입니다.

public static void saveScreenshot() throws Exception { 
    System.out.println("Saving screenshot!"); 
    Rectangle screenRect = new Rectangle(Display.getX(), Display.getY(), Display.getWidth(), Display.getHeight()); 
    BufferedImage capture = new Robot().createScreenCapture(screenRect); 
    ImageIO.write(capture, "png", new File("doc/saved/screenshot.png")); 
}