标签: bufferedimage

如何使用JFileChooser保存文件?

我的应用程序中有一个名为"另存为"的方法,它将我的应用程序的图像保存到文件中.我使用JFileChooser让用户选择他们想要的位置来保存文件.问题是除非用户明确键入文件格式,否则它将保存没有扩展名的文件.如何在"文件类型"下拉菜单中使用jpg,png等格式.

并且,如何从"文件类型"下拉菜单中获取用于保存图像文件的扩展名.

 ImageIO.write(image,extension,file);
Run Code Online (Sandbox Code Playgroud)

java swing bufferedimage jfilechooser filefilter

13
推荐指数
1
解决办法
5万
查看次数

重新调整图像大小而不会降低质量

我用这个代码调整了两个因素的图像大小.它有效,但调整大小后图像质量非常糟糕!你能帮助我吗?

这是代码

public class ImageTest {

private static final int factor1 = 3;
private static final int factor2 = 4;
public static void main(String [] args){

    JFileChooser cs = new JFileChooser();
    cs.setFileSelectionMode(cs.DIRECTORIES_ONLY);
    int i = cs.showOpenDialog(null);
    if(i==cs.APPROVE_OPTION){
        File f = cs.getSelectedFile();
        File[] ff = f.listFiles();
        for(int j=0;j<ff.length;j++){
            String end = ff[j].getName().substring(ff[j].getName().indexOf(".")+1);
            System.out.println(end);
            try{
                BufferedImage originalImage = ImageIO.read(ff[j]);
                int type = originalImage.getType() == 0? BufferedImage.TYPE_INT_ARGB : originalImage.getType();
                BufferedImage resizeImageJpg = resizeImageWithHint(originalImage, type);
                ImageIO.write(resizeImageJpg, end, new File("pr/"+ff[j].getName()));
            }catch(IOException e){
                e.printStackTrace();
            }
        } …
Run Code Online (Sandbox Code Playgroud)

java bufferedimage resize

13
推荐指数
3
解决办法
4万
查看次数

java.lang.IllegalArgumentException:input == null!使用ImageIO.read将图像加载为bufferedImage时

这是一个在这个网站上被问过100次的问题,但是我已经查看了所有这些问题,即使它们都已经解决了,但没有一个解决方案适合我.

这是我的代码的样子:

public Button1(Client client, String imgName) {
    this.client = client;   

    try {
        this.icon = ImageIO.read(this.getClass().getResourceAsStream("/resources/" + imgName));
    } catch (IOException e) {
        e.printStackTrace();
    }
Run Code Online (Sandbox Code Playgroud)

代码运行时会导致以下错误:

Exception in thread "main" java.lang.IllegalArgumentException: input == null!
at javax.imageio.ImageIO.read(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

字符串imgName从子类传递给构造函数,并且是图像的名称(例如image.png).我还确保我的资源文件夹位于项目文件夹的根目录中,并作为源文件夹包含在eclipse项目中.我也确保System.getProperty("user.dir")指向正确的位置.我也尝试使用getResource()而不是getResourceAsStream(),但它仍然不起作用.

java bufferedimage javax.imageio

13
推荐指数
2
解决办法
3万
查看次数

IllegalArgumentException:源栅格波段和源颜色空间组件的数量不匹配对于彩色图像异常

有人建议的上述答案将我的彩色图像转换为黑白图像.所以这不适合我的问题.

File file = new File("path");          
BufferedImage bufferedImage = ImageIO.read( file );
Run Code Online (Sandbox Code Playgroud)

这是代码,下面是图像.下载图像并保存在您的电脑中.并尝试使用正确的path值运行上面的代码,它将在主题中引发异常

下载图片:https://skydrive.live.com/?cid = 19547371C4F3B839&id = 19547371C4F3B839%21105

简单地说,如果有人可以从图像中获取java.awt.image.BufferedImage对象,那就足够了(不应该将图像转换为灰度图像).

如果你能回答这个问题,你就是天才:D.Plz的帮助.

java bufferedimage image-processing javax.imageio

13
推荐指数
1
解决办法
2万
查看次数

将两个BufferedImages并排复制到一个图像中

我有两个图像,我想将这两个图像复制到一个新图像,其中第二个图像在第一个图像旁边,而不是在它的顶部.

BufferedImage imgb1 = img1;
BufferedImage imgb2 = img2;
BufferedImage imgResult = new BufferedImage(...);
Run Code Online (Sandbox Code Playgroud)

其中imgResult包含彼此相邻的第一个和第二个图像.

java bufferedimage image image-processing

12
推荐指数
1
解决办法
2万
查看次数

如何在具有透明度的java BufferedImage中读取像素颜色

我正在读取BufferedImage中的像素颜色,如下所示:

.....
InputStream is = new BufferedInputStream(conn.getInputStream());
BufferedImage image = ImageIO.read(is);

int color = image.getRGB(x, y);

int  red = (colour & 0x00ff0000) >> 16;
int  green = (colour & 0x0000ff00) >> 8;
int  blue = colour & 0x000000ff;
Run Code Online (Sandbox Code Playgroud)

现在这个工作正常,除了透明度的png.我发现如果x,y指的是没有颜色的透明像素,我仍然会读取一种颜色,通常与图像中其他地方使用的颜色相同.

如何检测像素实际上是透明的而不是彩色的?

谢谢

java transparency bufferedimage javax.imageio

11
推荐指数
1
解决办法
2万
查看次数

在BufferedImage中快速加载和绘制RGB数据

在Windows上运行的一些Java代码中,我正在从磁盘读取一些大块RGB数据,并希望尽快将其显示在屏幕上.RGB数据是每通道8位,没有任何alpha.目前我有以下代码来创建BufferedImage.

BufferedImage getBufferedImage(File file, int width, int height) {

    byte[] rgbData = readRGBFromFile(file);

    WritableRaster raster = Raster.createInterleavedRaster(
        rgbData, width, height, 
        width * 3, // scanlineStride
        3, // pixelStride
        new int[]{0, 1, 2}, // bandOffsets
        null);

    ColorModel colorModel = new ComponentColorModel(
        ColorSpace.getInstance(ColorSpace.CS_sRGB), 
        new int[]{8, 8, 8}, // bits
        false, // hasAlpha
        false, // isPreMultiplied
        ComponentColorModel.OPAQUE, 
        DataBuffer.TYPE_BYTE);

    return new BufferedImage(colorModel, raster, false, null);
}
Run Code Online (Sandbox Code Playgroud)

问题是将此渲染到屏幕的性能非常慢.大约250 - 300毫秒.我已经读过,为了获得最佳性能,您需要在与屏幕兼容的BufferedImage中显示.为此,我将从上述方法返回的缓冲图像传递给这样的方法.

BufferedImage createCompatibleImage(BufferedImage image)
{
    GraphicsConfiguration gc = GraphicsEnvironment.
        getLocalGraphicsEnvironment().
        getDefaultScreenDevice().
        getDefaultConfiguration();

    BufferedImage newImage = gc.createCompatibleImage( …
Run Code Online (Sandbox Code Playgroud)

java graphics bufferedimage

11
推荐指数
2
解决办法
1万
查看次数

Java:BufferedImage到Bitmap格式

我有一个程序,我使用代码捕获屏幕:

robot = new Robot();
BufferedImage img = robot.createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
Run Code Online (Sandbox Code Playgroud)

现在我想将这个BufferedImage转换为Bitmap格式并通过函数返回它以满足其他需求,而不是将其保存在文件中.有什么帮助吗?

java bufferedimage bitmap

11
推荐指数
1
解决办法
1万
查看次数

在没有I/O的情况下将BufferedImage转换为byte []

嗨我在内存中有一个BufferedImage实例,并希望将其转换为byte []以编码为base64字符串而不进行I/O操作以提高性能.我使用以下API:

ByteArrayOutputStream baos = new ByteArrayOutputStream ();
ImageIO.write(image,"png",baos);
return baos.toByteArray();
Run Code Online (Sandbox Code Playgroud)

但是,此API仍隐式将映像写入OS临时目录,如果底层OS临时目录已满并且无法创建临时文件,则会导致失败.堆栈跟踪:

Caused by: java.io.IOException: No space left on device
    at java.io.RandomAccessFile.write(RandomAccessFile.java:493)
    at javax.imageio.stream.FileCacheImageOutputStream.write(FileCacheImageOutputStream.java:134)
    at javax.imageio.stream.ImageOutputStreamImpl.write(ImageOutputStreamImpl.java:66)
    at com.sun.imageio.plugins.png.PNGImageWriter.write_magic(PNGImageWriter.java:376)
    at com.sun.imageio.plugins.png.PNGImageWriter.write(PNGImageWriter.java:1115)
    at javax.imageio.ImageWriter.write(ImageWriter.java:628)
    at javax.imageio.ImageIO.write(ImageIO.java:1480)
    at javax.imageio.ImageIO.write(ImageIO.java:1554)
Run Code Online (Sandbox Code Playgroud)

在没有I/O的情况下进行转换是否有效(如内存转换或高效I/O)方式?请指教.

java bufferedimage in-memory javax.imageio

11
推荐指数
2
解决办法
3985
查看次数

我可以从JPanel创建BufferedImage而无需在JFrame中呈现吗?

是否可以从JPanel创建BufferedImage而无需先在JFrame中呈现它?我搜遍了我能想到的任何地方,找不到答案.有人可以帮忙吗?

这是一些示例代码.如果我不取消注释JFrame代码,我的BufferedImage是空白的.

    test(){
//      JFrame frame = new JFrame();
        JPanel panel = new JPanel();
        Dimension dim = new Dimension(50,50);
        panel.setMinimumSize(dim);
        panel.setMaximumSize(dim);
        panel.setPreferredSize(dim);
        JLabel label = new JLabel("hello");
        panel.add(label);
//      frame.add(panel);
//      frame.pack();
        BufferedImage bi = getScreenShot(panel);

        //...code that saves bi to a jpg
    }

    private BufferedImage getScreenShot(JPanel panel){
        BufferedImage bi = new BufferedImage(panel.getWidth(), panel.getHeight(), BufferedImage.TYPE_INT_ARGB);
        panel.paint(bi.getGraphics());
        return bi;
    }
Run Code Online (Sandbox Code Playgroud)

java swing bufferedimage jpanel jframe

11
推荐指数
1
解决办法
8731
查看次数