zoukankan      html  css  js  c++  java
  • 图像的读取、缩小、保存

    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
  • 相关阅读:
    ATM代码及遇到的问题总结
    暑假日报-52
    暑假日报-51
    暑假日报-50
    暑假日报-49
    暑假日报-48
    线段树优化建图(炸弹 + 选课)
    联考day2 C. 舟游
    联赛模拟测试5题解
    第19周作业
  • 原文地址:https://www.cnblogs.com/bokeofzp/p/6055663.html
Copyright © 2011-2022 走看看