图像的读取缩小保存

Posted Lammy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像的读取缩小保存相关的知识,希望对你有一定的参考价值。

Image src = javax.imageio.ImageIO.read(new File(".\\\\pictures\\\\00.jpg"))
BufferedImage bufferedImage0 = new BufferedImage(w2,h2,  
                BufferedImage.TYPE_INT_RGB);       
        bufferedImage0.getGraphics().drawImage( 
                src.getScaledInstance(w2,h2, Image.SCALE_SMOOTH), 
                0, 0, null); 
//生成缩略图 上面的方法是将图片src平滑缩小到bufferimage里去
        ImageIO.write(bufferedImage0, "jpg", new File(".\\\\result\\\\0.jpg"));
View Code

w2,h2是创建bufferImage的大小,与原图不一样,因此可以缩小放大图片。且必须引入相关的包import java.awt.image.BufferedImage;import java.awt.Image; imageBuufer 是图片在内存里,可以直接setRGB 和getRGB像素。

java中的一些存储是3byte,且最高位是符号位,因此r、g、b合成像素时候需要注意,如下:

public BufferedImage grayimage( BufferedImage bufferedImage) {
        BufferedImage bufferedImage2 = new BufferedImage(w, h,
                BufferedImage.TYPE_3BYTE_BGR);
        for (int x = 0; x < w; x++) {
            for (int y = 0; y < h; y++) {
                int argb = bufferedImage.getRGB(x, y);
                int r = (argb >> 16) & 0xFF;
                int g = (argb >> 8) & 0xFF;
                int b = (argb >> 0) & 0xFF;
                int grayPixel = (int) (r + g + b) / 3;        
                int rgb = (grayPixel * 256 + grayPixel) * 256 + grayPixel;
                if (rgb > 8388608) //8388608  = 256*256*256/2 是24位表示的最大数,最高位是符号位,再大就是负数表示了
                {
                    rgb = rgb - 16777216;
                }
                bufferedImage2.setRGB(x, y, rgb);
            }
        }
        return bufferedImage2;
    }
View Code

 

以上是关于图像的读取缩小保存的主要内容,如果未能解决你的问题,请参考以下文章

将图像加载到画布上并放大/缩小并移动它以适应并保存画布上的内容

fastreport4 picture 动态 设定大小,我的产品图像打印需要从数据库中读取,再按一定比例进行缩小。

如何将图像保存和读取为文本,嵌入在代码中

自定义控件实现图像的显示和放大缩小,平移,右击菜单选择“自适应窗口”“保存图像”

使用 savedInstanceState 保存片段状态

如何在不将图像保存在本地的情况下将捕获的图像(Surface View)传递给另一个片段?