4

SDカードのフォルダに保存する必要のあるビットマップイメージがあります。コードを以下に示します。期待どおりにフォルダとファイルが作成されますが、画像はファイルに保存されず、空のファイルのままになります...誰かが何が問題なのか教えてもらえますか?

Bitmap merged = Bitmap.createBitmap(mDragLayer.getChildAt(0).getWidth(), mDragLayer.getChildAt(0).getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(merged);

// save to folder in sd card
try {
    File imagesFolder = new File(Environment.getExternalStorageDirectory(), "folder");
    if(!imagesFolder.exists())
        imagesFolder.mkdirs();
    int imageNum;
    if(imagesFolder.list()==null)
        imageNum = 1;
    else
        imageNum = imagesFolder.list().length + 1;

    String fileName = "file_" + String.valueOf(imageNum) + ".jpg";
    File output = new File(imagesFolder, fileName);
    while(output.exists()){
        imageNum++;
        fileName = "file_" + String.valueOf(imageNum) + ".jpg";
        output = new File(imagesFolder, fileName);
    }

    OutputStream fOut = new FileOutputStream(output);
    merged.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
    fOut.flush();
    fOut.close();

    Toast.makeText(getApplicationContext(), "Saved", Toast.LENGTH_SHORT).show();

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

3 に答える 3

17

まず、AndroidManifest.xmlに権限を追加します

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

次に、Javaファイルに以下のように書き留めます。

    String extr = Environment.getExternalStorageDirectory().toString();
            File mFolder = new File(extr + "/MyApp");

            if (!mFolder.exists()) {
                mFolder.mkdir();
            }

            String strF = mFolder.getAbsolutePath();
            File mSubFolder = new File(strF + "/MyApp-SubFolder");

            if (!mSubFolder.exists()) {
                mSubFolder.mkdir();
            }

            String s = "myfile.png";

            f = new File(mSubFolder.getAbsolutePath(),s);

更新しました

           String strMyImagePath = f.getAbsolutePath();
             FileOutputStream fos = null;
             try {
                 fos = new FileOutputStream(f);
                 bitmap.compress(Bitmap.CompressFormat.PNG,70, fos);

                 fos.flush();
                 fos.close();
              //   MediaStore.Images.Media.insertImage(getContentResolver(), b, "Screen", "screen");
             }catch (FileNotFoundException e) {

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

                 e.printStackTrace();
             }
于 2012-11-01T09:41:54.900 に答える
7

ビットマップが必要です

画像を保存するためのパスを渡す必要があります

Bitmap b = pagesView.getDrawingCache();
b.compress(CompressFormat.JPEG, 100, new FileOutputStream(Environment.getExternalStorageDirectory() + "/NameOfFile.jpg"));

マニフェストファイルに権限を追加する必要があります。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

于 2012-11-01T09:44:54.603 に答える
7

複雑なコードで難しくしないでください。本当に非常に単純です。以下のコードを試してください。

SDカードに最初のディレクトリを作成します:

public static String strpath =  android.os.Environment.getExternalStorageDirectory().toString();
public static String dirName = "DIR_NAME";

File makeDirectory = new File(strpath+"/"+dirName);
makeDirectory.mkdir();

次に、以下のように2つの文字列変数を作成する必要があります。

String filename =  "yourImageName".jpg";
String dirpath =strpath + "/"+dirName + "/";

ファイルを可変にする:

File storagePath =  new File(dirpath);
File myImage = new File(storagePath, filename);
outStream = new FileOutputStream(myImage);  
outStream.write(data);
outStream.close();

これがお役に立てば幸いです。

于 2012-11-01T10:38:50.080 に答える