-1

画像にエンコードされたデータをデコードしようとしています。エンコードは正常に行われ、画像のデータ サイズも変更されますが、何らかの理由でデコードされたデータは空の文字列になります。エンコードされたデータが失われたか、このコードに何らかの誤りがあります。

int temp,tempText=0,x=0,p=0;

    try
    {
        image= ImageIO.read(new File("C:\\Users\\Desktop\\Encoded.png"));

    }
    catch (IOException e)
    {
        e.printStackTrace();
    }


    for(int i=0;i<image.getWidth();i++)
    {
        for(int j=0;j<image.getHeight();j++)
        {
            pixels[i][j]=image.getRGB(i, j);
        }
    }

    for(int i=0;i<Width;i++)
    {
        for(int j=0;j<Height;j++)
        {
            temp=pixels[i][j];

            int change=0;   

            for(int k=0;k<4;k++) // 4 iterations for 4bytes of every pixel
            {
                if(k==0)
                {
                    change=1;
                }
                else
                    if(k==1)
                    {
                        change=256;
                    }
                    else
                        if(k==2)
                        {
                            change=65536;
                        }
                        else
                            if(k==3)
                            {
                                change = 16777216;
                            }


                tempText=tempText | (pixels[i][j] & change);

                p++;

                if(p==8) // because character is of 8bits
                {
                    myString.concat(String.valueOf(tempText));// Writing decoded data in string
                    p=0;
                    tempText=0;

                }
            }


        }

 // Writing in file

    try
    {
        file = new File("C:\\Users\\Desktop\\Retreive.txt");
        fw = new FileWriter(file);

        bw= new BufferedWriter(fw);

        bw.write(myString);
        bw.close();

    } 
    catch (Exception e) 
    {
        e.printStackTrace();
    }

私が犯している間違いや、このコードに欠けているものがある場合は、親切にお知らせください。

4

1 に答える 1

3

String.concat呼び出した文字列は変更しませんが、代わりに新しい文字列を返します。そのため、代わりに使用myString = myString.concat(...)すると、より良い結果が得られる可能性があります。文字コードが含まれている場合tempTextは、それを char にキャストできます ( String.valueOfint の文字列表現を返すため)。

// Writing decoded data in string
// myString = myString.concat(String.valueOf(tempText));
myString += (char) tempText;

それ以外の:

myString.concat(String.valueOf(tempText));// Writing decoded data in string
于 2013-01-20T12:09:42.797 に答える