簡體   English   中英

無法縮小灰度圖像

[英]Unable to down scale gray scale image

我有一個尺寸為256 * 256的灰度圖像,我正在嘗試將其縮小為128 * 128。 我平均要取兩個像素並將其寫入輸出文件。

class Start {

 public static void main (String [] args) throws IOException {

 File input= new File("E:\\input.raw");

 File output= new  File("E:\\output.raw");
 new Start().resizeImage(input,output,2);

 }



 public  void resizeImage(File input, File output, int downScaleFactor) throws IOException {
          byte[] fileContent= Files.readAllBytes(input.toPath());
          FileOutputStream  stream= new FileOutputStream(output);
          int i=0;
          int j=1;
          int result=0;
          for(;i<fileContent.length;i++)
          {
                if(j>1){
                    // skip the records.
                    j--;
                    continue;
                }
                else { 
                    result = fileContent[i];
                    for (; j < downScaleFactor; j++) {
                        result =  ((result + fileContent[i + j]) / 2);
                    }
                    j++;
                    stream.write( fileContent[i]);
                }
          }
        stream.close();
      }

}

上面的代碼成功運行,我可以看到輸出文件的大小減小了,但是當我嘗試將輸出文件(原始文件)在線轉換為jpg( https://www.iloveimg.com/convert-to-jpg/raw- to-jpg ),這給我一個錯誤,指出文件已損壞。 我已經從同一在線工具轉換了輸入文件,它可以正常工作。 我的代碼創建了損壞的文件,出現了問題。 我該如何糾正?

PS我不能使用任何直接縮小圖像尺寸的庫。

您的代碼未處理圖像大小調整。

請參閱如何在Java中調整圖像大小

我在這里復制一個簡單的版本:

import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

public class ImageResizer {

    public static void resize(String inputImagePath,
            String outputImagePath, int scaledWidth, int scaledHeight)
            throws IOException {
        // reads input image
        File inputFile = new File(inputImagePath);
        BufferedImage inputImage = ImageIO.read(inputFile);

        // creates output image
        BufferedImage outputImage = new BufferedImage(scaledWidth,
                scaledHeight, inputImage.getType());

        // scales the input image to the output image
        Graphics2D g2d = outputImage.createGraphics();
        g2d.drawImage(inputImage, 0, 0, scaledWidth, scaledHeight, null);
        g2d.dispose();

        // extracts extension of output file
        String formatName = outputImagePath.substring(outputImagePath
                .lastIndexOf(".") + 1);

        // writes to output file
        ImageIO.write(outputImage, formatName, new File(outputImagePath));
    }

    public static void resize(String inputImagePath,
            String outputImagePath, double percent) throws IOException {
        File inputFile = new File(inputImagePath);
        BufferedImage inputImage = ImageIO.read(inputFile);
        int scaledWidth = (int) (inputImage.getWidth() * percent);
        int scaledHeight = (int) (inputImage.getHeight() * percent);
        resize(inputImagePath, outputImagePath, scaledWidth, scaledHeight);
    }

    public static void main(String[] args) {
        String inputImagePath = "resources/snoopy.jpg";
        String outputImagePath1 = "target/Puppy_Fixed.jpg";
        String outputImagePath2 = "target/Puppy_Smaller.jpg";
        String outputImagePath3 = "target/Puppy_Bigger.jpg";

        try {
            // resize to a fixed width (not proportional)
            int scaledWidth = 1024;
            int scaledHeight = 768;
            ImageResizer.resize(inputImagePath, outputImagePath1, scaledWidth, scaledHeight);

            // resize smaller by 50%
            double percent = 0.5;
            ImageResizer.resize(inputImagePath, outputImagePath2, percent);

            // resize bigger by 50%
            percent = 1.5;
            ImageResizer.resize(inputImagePath, outputImagePath3, percent);

        } catch (IOException ex) {
            System.out.println("Error resizing the image.");
            ex.printStackTrace();
        }
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM