如何翻轉屏幕截圖圖片?我在其他地方找不到我的問題。
示例代碼:如何使用glReadPixels()Bufferedimage水平翻轉圖像並使用ImageIO輸出?
/*
*@param fileLoc //Location of fileoutput destination
*@param format //"png"
*@param WIDTH //Display.width();
*@param HEIGHT //Display.height();
*/
private void getScreenImage(){
int[] pixels = new int[WIDTH * HEIGHT];
int bindex;
// allocate space for RBG pixels
ByteBuffer fb = ByteBuffer.allocateDirect(WIDTH * HEIGHT * 3);//.order(ByteOrder.nativeOrder());
// grab a copy of the current frame contents as RGB
glReadPixels(0, 0, WIDTH, HEIGHT, GL_RGB, GL_UNSIGNED_BYTE, fb);
BufferedImage image = 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));
}
try {
//Create a BufferedImage with the RGB pixels then save as PNG
image.setRGB(0, 0, WIDTH, HEIGHT, pixels, 0 , WIDTH);
ImageIO.write(image, format , fileLoc);
}
catch (Exception e) {
System.out.println("ScreenShot() exception: " +e);
}
}
基本上代碼工作用於捕獲屏幕,在爲「PNG」格式存儲。
但它輸出的圖像水平翻轉,因爲glReadPixels();
,
從左下角讀到右上角。
那麼如何在水平翻轉圖像之前我ImageIO.write();
?
謝謝在前面, 玫瑰。
我想它畫上一個新的圖像時使用'AffineTransform'翻轉。然後使用'ImageIO'保存新圖像。 –