-4

我有一个将文本文件写入 png 文件的程序,但它不起作用 - 图像在解码时返回不正确的字符,有时图像无法正确显示。这是我的代码:

public static void readText(String text, int[] pixArr, BufferedImage im, File outFile)
throws FileNotFoundException, IOException{
    char[] txt = text.toCharArray(); //Changes text file to array of characters
    int[] eightBit=new int[8]; //stores binary representation of characters
    for (int i=0;i<txt.length;i++){
        int hey=txt[i];
        for (int a=0;a<8;a++){     //converting text to binary
            eightBit[a]=hey%2;
            hey=hey/2;
            }
        eightBit=reverseArray(eightBit);
        insertion(pixArr, eightBit);
        }
    BufferedImage norm = new BufferedImage(im.getWidth(), im.getHeight(),
                                   BufferedImage.TYPE_INT_ARGB);
    norm.getGraphics().drawImage(im, 0, 0, null);
    ImageIO.write(im, "png", outFile);
    }   

public static void insertion(int[] pixArr, int[]eightBit){
    for (int i=0;i<pixArr.length;i++){
        for (int a=0;a<eightBit.length;a++){
            int temp=pixArr[i];
            temp=temp/2;
            temp*=2;
            pixArr[i++]=eightBit[a]+temp;
            }
        }
    }
4

2 回答 2

2

我认为你需要从你的代码中退后一步,看看你在哪里修改了哪些数据结构。

您声明一个数组eightBit来跟踪一个字节的八位。那很整齐。(它应该是一个子例程,以便您可以更轻松地对其进行调试。)但是您将结果输出到insertion(pixArr,eightBit). 跟随那个insertion()调用,你会发现每次调用都给它相同 的数组——并且没有机制在后续调用pixArr中写入数组的不同部分。pixArr

这个例程可以提供的最好的就是写八位。

哪八位?最后八位。

但是我从来没有看到int pixArr[]过被传递回实际编写png.

我强烈建议将这个问题分解成更小的部分并单独测试每一部分

于 2011-11-22T02:15:17.393 回答
2

这并不能完全回答您的问题,但是如果您将代码分开并使用有意义的变量名,您会发现代码更容易调试。这不是俄罗斯方块,你不必把所有东西都塞进尽可能小的空间:)

我绝对同意 sarnold 的观点——你应该把你的问题分解成小的、不同的、可测试的子程序;这将帮助您识别代码中有效的部分以及无效的部分。

于 2011-11-22T02:34:26.740 回答