0

外部.txtファイルを使用して、アプリで誰かが「写真を撮る」たびにインクリメントする名前インデックスを保存しています (つまりimage_1.jpgimage_2.jpgなど)。ユーザーがプログラムを実行するたびに写真を上書きしないように、データを外部に保存しようとしています。ただし、Processing がエクスポート用にコンテンツをパッケージ化する方法のため、同じファイルに対して読み取りと書き込みの両方を行うことはできません。アプリ パッケージのコンテンツにある適切なファイルを読み取りますが、そのファイルに書き込もうとすると、アプリ自体と同じディレクトリに新しいフォルダーが作成され、代わりに同じ名前の新しいファイルに書き込まれます。

基本的に、適切なファイルを読み取りますが、書き込みを拒否し、代わりにコピーを作成してそのファイルに書き込みます。アプリは正常に動作しますが、アプリを開いて写真を撮るたびに、既に持っている画像が上書きされます。

「書き込み先」の場所に、エクスポートされたアプリがパッケージ コンテンツ内のデータ フォルダーを格納する場所と明示的に同じリンク ( Contents/Resources/Java/data/assets) を指定しようとしましたが、これにより、アプリと同じファイルにこのディレクトリのコピーが作成されます。

../storage/pictureNumber.txtまた、読み取りコードを変更し、このファイルをアプリ自体の横に配置して、アプリをエクスポートするときに、データフォルダーから読み書きしようとしているファイルを除外しようとしました。これを行うと、アプリは独自のデータフォルダーを検索してストレージを探しており、../. エクスポートされた処理中の .app で同じファイルの読み取りと書き込みの両方がうまくいった人はいますか?

ファイルの読み込みと保存を処理するクラスのコードは次のとおりです。

class Camera {
    PImage cameraImage;
    int cameraPadding = 10;
    int cameraWidth = 60;
    int opacity = 0;
    int flashDecrementer = 50; //higher number means quicker flash
    int pictureName;

    Camera() {
        String[] pictureIndex = loadStrings("assets/pictureNumber.txt");
        pictureName = int(pictureIndex[0]);
        cameraImage = loadImage("assets/camera.jpg");
        String _pictureName = "" + char(pictureName); 
        println(pictureName); 
    }

    void display(float mx, float my) {
        image(cameraImage, cameraPadding, cameraPadding,
              cameraWidth, cameraWidth-cameraWidth/5);
    }

    boolean isOver(float mx, float my) {
        if (mx >= cameraPadding &&
            mx <= cameraPadding+cameraWidth &&
            my >= cameraPadding &&
            my <= cameraPadding+cameraWidth-cameraWidth/5) {
            return true;
        }
        else {
            return false;
        }
    }

    void captureImage() {
        save("pictures/"+lines.picturePrefix+"_"+pictureName+".jpg");
        pictureName++;
        String _null = "";
        // String _tempPictureName = _null.valueOf(pictureName);
        String[] _pictureName = {_null.valueOf(pictureName)}; 
        saveStrings("assets/pictureNumber.txt", _pictureName);
        println(_pictureName);
    }

    void flash() {
        fill(255, opacity);
        rect(0,0,width,height);
        opacity -= flashDecrementer;
        if(opacity <= 0) opacity = 0;
    }
}
4

1 に答える 1

0

多くの検索の後、project.jar の外部のディレクトリから読み取るには、savePath() を使用する必要があることがわかりました。カメラ クラス コンストラクターは次のようになります。

path = savePath("storage");
println(path);
String[] pictureIndex = loadStrings(path+"/pictureNumber.txt");
pictureName = int(pictureIndex[0]);
cameraImage = loadImage("assets/camera.jpg");
String _pictureName = ""+char(pictureName); 

そしてすべてがうまくいきます!

于 2013-04-01T03:27:02.293 に答える