我有一个程序用于将文本文件写入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;
}
}
}
答案 0 :(得分:2)
我认为您需要从代码中退一步,看看修改哪些数据结构的位置。
声明一个数组eightBit
以跟踪一个字节的八位。那很整齐。 (它应该是一个子程序,以便您可以更轻松地调试它。)但是您将输出结果传递给insertion(pixArr,eightBit)
。按照insertion()
调用,您会看到每次调用都给它相同的 pixArr
数组 - 并且没有机制写入不同的后续调用中pixArr
数组的部分。
此例程提供的最佳是写入8位。
哪八位?最后八位。
但是我从未看到int pixArr[]
被传递回实际写入png
的代码。
我强烈建议将此问题拆分为更小的部分并单独测试每个部分。
答案 1 :(得分:2)
这并不能完全回答您的问题,但如果您将代码分开并使用有意义的变量名称,您会发现代码更容易调试。这不是俄罗斯方块,你不必把所有东西塞进尽可能小的空间:)
我绝对同意sarnold - 你应该将你的问题分解成小的,独特的,可测试的子程序;这将有助于您识别代码中有效的部分以及不能代码的部分。