0

私のプロジェクトでは、プログラムを使用してピクセルを抽出し、それらのピクセルを操作して、パッケージに保存した画像があります。私が保存した方法は次のとおりです。

private void createPicture()
{
    System.out.println("Inside createPicture");
    System.out.println(contextPath);
    try{
        FileOutputStream fos = new FileOutputStream(contextPath + "/" + picName);
        DataOutputStream dos = new DataOutputStream(fos); 

        for(int i=0; i<splitedPixel.length; i++)
            dos.writeByte(splitedPixel[i]);

        dos.flush();
        dos.close();
    }
    catch(IOException e){
        System.out.println("IOException : " + e);
    }
    System.out.println("Picture Created.");
}

だから、それは私の写真をこのディレクトリに保存します

/data/data/my_package_name/files/myPic.bmp

ここで、この新しい画像を読み取り、この画像のピクセルを抽出します。私はこの方法を使用しました:

public Stego(Context context)
{
    //Instantiate an ImageView and define its properties
    contextPath = context.getFilesDir().getAbsolutePath();
    image = BitmapFactory.decodeFile(contextPath + "/" + picName);

    System.out.println("Image= " + image);
    imWidth  = image.getWidth();
    imHeight = image.getHeight();
    getMaxMessageChars();
    System.out.println("Width: " + imWidth);
}

ここでプログラムがクラッシュします。logcat は、画像の結果が null であり、プログラムが getWidth に達するとクラッシュすることを示します。

これらの書き方と読み方は正しいですか?この画像が作成されているかどうかを確認するために、エミュレータを介してディレクトリに移動できますか?

ありがとう

4

1 に答える 1

0

fosメソッドでストリームを閉じる必要があると思いますcreatePicture()

BitmapFactory.decode*()メソッドnullは、エラーの場合に戻ります。したがってnull、デコード後に確認することをお勧めします。

私の知る限り、Android の内部ストレージからファイルを保存できるのは、エミュレーターまたはルート化されたデバイスのみです。これは、Eclipse の DDMS Perspective または Android SDK ツールチェーンの ddms ユーティリティを使用して行うことができます。[デバイス] -> [ファイル エクスプローラー] をクリックして、デバイスからファイルをプルするだけです。

ルート化されていないデバイスからファイルを取得する場合は、外部ストレージ (sdcard) に保存することをお勧めします。この場合、デバイスを外付けハード ドライブのようなコンピュータに接続できます。

于 2010-12-03T14:02:13.133 に答える