1

コード 1

/*
   Java code for making the image grayscale, then binarizing it.
 */
import javax.imageio.ImageIO;
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.lang.Object;
import java.lang.*;
import java.io.IOException;
import javax.imageio.ImageIO;
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.util.ArrayList;
import java.util.List;
public class lineremoval {

    private static BufferedImage binarizedImage;


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

        File orignal_name = new File("photot.png");
        binarizedImage = ImageIO.read(orignal_name);
        ExtractBeltsBasedonCoveredHeight();

        BufferedImage    bmp = new BufferedImage(binarizedImage.getWidth(), binarizedImage.getHeight(),binarizedImage.getType());
        for(int i=0; i<binarizedImage.getWidth(); i++) {
            for(int j=0; j<binarizedImage.getHeight(); j++) {
                int red;
                red = new Color(binarizedImage.getRGB(i,j)).getRed();
                int alpha = new Color(binarizedImage.getRGB(i,j)).getAlpha();
                int newPixel;
                newPixel = colorToRGB(alpha, red,red,red);
                bmp.setRGB(i, j, newPixel);

            }
        }
        writeImage(bmp,0);

    }
    public static int FindBottomOfLine(BufferedImage bitmap, int topOfLine)
    {
        int x=0;
        boolean no_black_pixel;
        no_black_pixel = false;
        int to_match;
        while (no_black_pixel == false)
        {
            topOfLine++;
            int white=new Color(bitmap.getRGB(0,0)).getRed();
            no_black_pixel = true; 
            for (x = 0; x < bitmap.getWidth() && topOfLine < bitmap.getHeight(); x++)
            {
                to_match = new Color(bitmap.getRGB(x,topOfLine)).getRed();
                if (to_match!=white)
                    no_black_pixel = false;
            }
        }
        return topOfLine - 1;
    }
    public static int  ExtractBeltsBasedonCoveredHeight()
    {
        int y = 0;
        int x = 0;
        boolean line_present = true;
        ArrayList<Integer> line_top = new ArrayList<Integer>(1000);
        ArrayList<Integer> line_bottom = new ArrayList<Integer>(1000);
        while (line_present)
        {
            x = 0;
            y = FindNextLine(binarizedImage, y, x);
            if (y == -1)
                break;
            if (y >= binarizedImage.getHeight())
            {
                line_present = false;
            }
            if (line_present)
            {
                line_top.add(y);
                y = FindBottomOfLine(binarizedImage, y) + 1;
                line_bottom.add(y);
            }
        }

        return 1;
    }
    private static void writeImage(BufferedImage bmp,int number) throws IOException {
        String strI = Integer.toString(number); 
        File file = new File("output"+strI+".png");
        try {
                    ImageIO.write(bmp, "png", file);
            }catch(IOException e) {
                    System.out.println("Not worked");
            }
            finally {
                    System.out.println("Works fine");
            }

    }
    private static int colorToRGB(int alpha, int red, int green, int blue) {

        int newPixel = 0;
        newPixel += alpha;
        newPixel = newPixel << 8;
        newPixel += red; newPixel = newPixel << 8;
        newPixel += green; newPixel = newPixel << 8;
        newPixel += blue;

        return newPixel;

    }
    public static int FindNextLine(BufferedImage bitmap, int y,int x)
    {
        if (y >= bitmap.getHeight())
            return -1;
        int white=new Color(bitmap.getRGB(0,0)).getRed();
        int to_match = new Color(bitmap.getRGB(x,y)).getRed();
        while (to_match==white)
        {

            x++;
            if (x == bitmap.getWidth())
            {
                x = 0;
                y++;
            }
            if (y >= bitmap.getHeight())
            {
                break;
            }
            to_match = new Color(bitmap.getRGB(x,y)).getRed();
        }
        return y < bitmap.getHeight() ? y : -1;
    }

}

コード 2

 import javax.imageio.ImageIO;
    import java.awt.Color;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.lang.Object;
    import java.lang.*;
    import java.io.IOException;
    import javax.imageio.ImageIO;
    import java.lang.reflect.Field;
    import java.lang.reflect.ParameterizedType;
    import java.util.ArrayList;
    import java.util.List;
    public class lineremoval {

        private static BufferedImage binarizedImage;


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

            File orignal_name = new File("photot.png");
            binarizedImage = ImageIO.read(orignal_name);
            ExtractBeltsBasedonCoveredHeight();
        }
        public static int FindBottomOfLine(BufferedImage bitmap, int topOfLine)
        {
            int x=0;
            boolean no_black_pixel;
            no_black_pixel = false;
            int to_match;
            while (no_black_pixel == false)
            {
                topOfLine++;
                int white=new Color(bitmap.getRGB(0,0)).getRed();
                no_black_pixel = true; 
                for (x = 0; x < bitmap.getWidth() && topOfLine < bitmap.getHeight(); x++)
                {
                    to_match = new Color(bitmap.getRGB(x,topOfLine)).getRed();
                    if (to_match!=white)
                        no_black_pixel = false;
                }
            }
            return topOfLine - 1;
        }
        public static int  ExtractBeltsBasedonCoveredHeight()
        {
            int y = 0;
            int x = 0;
            boolean line_present = true;
            ArrayList<Integer> line_top = new ArrayList<Integer>(1000);
            ArrayList<Integer> line_bottom = new ArrayList<Integer>(1000);
            while (line_present)
            {
                x = 0;
                y = FindNextLine(binarizedImage, y, x);
                if (y == -1)
                    break;
                if (y >= binarizedImage.getHeight())
                {
                    line_present = false;
                }
                if (line_present)
                {
                    line_top.add(y);
                    y = FindBottomOfLine(binarizedImage, y) + 1;
                    line_bottom.add(y);
                }
            }


            BufferedImage    bmp = new BufferedImage(binarizedImage.getWidth(), binarizedImage.getHeight(),binarizedImage.getType());
                            for(int i=0; i<binarizedImage.getWidth(); i++) {
                            for(int j=0; j<binarizedImage.getHeight(); j++) {
                    int red;
                    red = new Color(binarizedImage.getRGB(i,j)).getRed();
                    int alpha = new Color(binarizedImage.getRGB(i,j)).getAlpha();
                    int newPixel;
                    newPixel = colorToRGB(alpha, red,red,red);
                    bmp.setRGB(i, j, newPixel);

                    }
                    }
                    writeImage(bmp,0);


            return 1;
        }
        private static void writeImage(BufferedImage bmp,int number) throws IOException {
            String strI = Integer.toString(number); 
            File file = new File("output"+strI+".png");
            try {
                    ImageIO.write(bmp, "png", file);
            }catch(IOException e) {
                    System.out.println("Not worked");
            }
            finally {
                    System.out.println("Works fine");
            }

        }
        private static int colorToRGB(int alpha, int red, int green, int blue) {

            int newPixel = 0;
            newPixel += alpha;
            newPixel = newPixel << 8;
            newPixel += red; newPixel = newPixel << 8;
            newPixel += green; newPixel = newPixel << 8;
            newPixel += blue;

            return newPixel;

        }
        public static int FindNextLine(BufferedImage bitmap, int y,int x)
        {
            if (y >= bitmap.getHeight())
                return -1;
            int white=new Color(bitmap.getRGB(0,0)).getRed();
            int to_match = new Color(bitmap.getRGB(x,y)).getRed();
            while (to_match==white)
            {

                x++;
                if (x == bitmap.getWidth())
                {
                    x = 0;
                    y++;
                }
                if (y >= bitmap.getHeight())
                {
                    break;
                }
                to_match = new Color(bitmap.getRGB(x,y)).getRed();
            }
            return y < bitmap.getHeight() ? y : -1;
        }

    }

x行の段落を含むビットマップ画像からx画像を取得したい。各 Image には、段落から 1 行を含める必要があります。このために、 function("ExtractBeltsBasedonCoveredHeight") を使用して 2 つのリストを取得しました。これらのリストの i 番目の要素は、(リスト list_top と list_bottom の) 段落の i 行目の開始行番号と終了行番号を示します。

これらの値を取得した後、関数 ExtractBeltsBasedonCoveredHeight から画像を作成できません。

私のコード1は画像を作成しますが、コード2はエラーを返します両方のコードは同じです唯一の違いはコード2にあり、関数「ExtractBeltsBasedonCoveredHeight」からwriteImageを呼び出し、コード1ではメイン関数からwriteImageを呼び出しました

エラーメッセージ

lineremoval.java:86: error: unreported exception IOException; must be caught or declared to be thrown
                writeImage(bmp,0);
                          ^
1 error
4

1 に答える 1

1

メッセージは (いつものように) 何が問題で、どのように修正するかを正確に伝えています。IOException を呼び出す可能性のあるコードを呼び出しています。これを行う場合は、例外をスローするか、try/catch ブロックでキャッチする必要があります。あなたの最善の策は、例外のチュートリアルをチェックして、これらの両方を行う方法を学ぶことです.

于 2013-03-03T07:33:38.260 に答える