如何翻转屏幕截图图像?我在其他任何地方都找不到我的问题。
示例代码:
/*
*@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();?
谢谢你,罗斯。
E.G. of flipping an image horizontally using an
AffineTransform
.
import java.awt.*;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import javax.swing.*;
public class Test001 {
public static BufferedImage getFlippedImage(BufferedImage bi) {
BufferedImage flipped = new BufferedImage(
bi.getWidth(),
bi.getHeight(),
bi.getType());
AffineTransform tran = AffineTransform.getTranslateInstance(bi.getWidth(), 0);
AffineTransform flip = AffineTransform.getScaleInstance(-1d, 1d);
tran.concatenate(flip);
Graphics2D g = flipped.createGraphics();
g.setTransform(tran);
g.drawImage(bi, 0, 0, null);
g.dispose();
return flipped;
}
Test001(BufferedImage bi) {
JPanel gui = new JPanel(new GridLayout(1,2,2,2));
gui.add(new JLabel(new ImageIcon(bi)));
gui.add(new JLabel(new ImageIcon(getFlippedImage(bi))));
JOptionPane.showMessageDialog(null, gui);
}
public static void main(String[] args) throws AWTException {
final Robot robot = new Robot();
Runnable r = new Runnable() {
@Override
public void run() {
final BufferedImage bi = robot.createScreenCapture(
new Rectangle(0, 360, 200, 100));
new Test001(bi);
}
};
SwingUtilities.invokeLater(r);
}
}
HiI想知道如何水平翻转和成像,对于一个practce任务,我得到了一个读取图像的代码,将其反转为指示亮度从0到5的图像,我必须翻转图像。 我得到一个错误
问题内容: 我试图翻转图像以显示4种方式:原始(无变化),水平翻转,垂直翻转,水平+垂直翻转。 为了做到这一点,我在下面做,除了水平+垂直翻转之外,它还可以正常工作,你知道为什么它不起作用吗? 问题答案: 尝试这个: 以前没有用,因为您在CSS中覆盖了。因此,它没有执行全部操作,而是执行了最后一个操作。有点像如果您执行两次,它将覆盖第一个。
问题内容: 进行UIImage翻转的解决方案是使用Objective-C代码: 但是,imageWithCGImage在Swift中不可用!是否有使用Swift水平翻转图像的解决方案?谢谢! 问题答案: 大多数工厂方法会迅速转换为初始化程序。只要有可用,即使class方法仍然可用,它们也是首选。您可以使用: 用法如下所示:
问题内容: 我正在使用以下代码将Image转换为byte []。 现在,当我测试我的代码时: 我得到非常奇怪的结果: 将图像转换为byte []后,其大小减小了1/4左右,当我将byte []转换回图像时,其大小也会改变。但是在所需位置成功创建了输出图像。放大500-600%后,我可以看到原始图像和新图像的质量略有不同。放大后,新图像几乎不模糊。 这是我正在测试的图像http://pbrd.co/
问题内容: 我正在使用以下代码将Image转换为byte []。 现在,当我测试我的代码时: 我得到非常奇怪的结果: 将图像转换为byte []后,其大小减小了1/4左右,当我将byte []转换回图像时,其大小也会改变。但是在所需位置成功创建了输出图像。放大500-600%后,我可以看到原始图像和新图像的质量略有不同。放大后,新图像几乎不模糊。 这是我正在测试的图像http://pbrd.co/
我正在尝试使用下面的函数将CGM文件转换为PNG。我一直在得到NullPointerException。 下面是我面临的例外 我尝试调试代码,发现ImageIO不支持CGM格式(CanDecodeInputFilter为我的CGM返回false)。关于如何将CGM转换为PNG图像的任何想法。 PS:我正在使用java 11进行开发。 提前感谢 使现代化 根据回复,我尝试了jcgm库(将核心和图像库