-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

これはあなたの質問に正確に答えるものではありませんが、スペースを空けて意味のある変数名を使用すると、コードのデバッグがはるかに簡単になります。それはテトリスではありません。できるだけ小さなスペースにすべてを詰め込む必要はありません:)

私は間違いなく sarnold に同意します。問題を、小さく、明確で、テスト可能なサブルーチンに分解する必要があります。これは、コードの機能する部分と機能しない部分を識別するのに役立ちます。

于 2011-11-22T02:34:26.740 に答える
2

コードから一歩下がって、どのデータ構造を変更したかを確認する必要があると思います。

配列eightBitを宣言して、1 バイトの 8 ビットを追跡します。それはいいですね。(より簡単にデバッグできるように、サブルーチンにする必要があります。) しかし、出力の結果はinsertion(pixArr,eightBit). その呼び出しに従うと、単一の呼び出しごとに同じ配列を指定し、後続の呼び出しで配列の異なる部分に書き込むメカニズムがないinsertion()ことがわかります。 pixArrpixArr

このルーチンが提供できる最善の方法は、8 ビットの書き込みです。

どの8ビット?最後の 8 ビット。

しかしint pixArr[]、実際にpng.

この問題をより小さな部分に分割し、各部分を個別にテストすることを強くお勧めします。

于 2011-11-22T02:15:17.393 に答える