2

我想将位图图像存储在内部存储(而不是外部存储)上。我已经编写了这段代码,但似乎有问题。因为当我从 DDMS 下载图像时,我无法打开它。

public String writeFileToInternalStorage(Context context, Bitmap outputImage) {

        String fileName = Long.toString(System.currentTimeMillis()) + ".png";

        try {
            OutputStreamWriter osw = new OutputStreamWriter(context.openFileOutput(fileName, Context.MODE_PRIVATE));
            osw.write(outputImage.toString());
            Log.i(TAG, "Image stored at: " + fileName);
        } catch (Exception e) {
            Log.w(TAG, e.toString()); 
            fileName = null;
        } 

        return fileName;
    } 
4

2 回答 2

6

outputImage.toString() 不是图像:) 你放在文件上的不是二进制数据,而是一些字符串!

一种方法是这样的:

public String writeFileToInternalStorage(Context context, Bitmap outputImage) {
    String fileName = Long.toString(System.currentTimeMillis()) + ".png";

    final FileOutputStream fos = openFileOutput(fileName, Context.MODE_PRIVATE);
    outputImage.compress(CompressFormat.PNG, 90, fos);
}

我直接在浏览器中编码,可能会有一些语法错误,但代码应该可以工作。

于 2012-07-22T10:47:51.827 回答
0

问题是您使用 .toString() 而不是将位图压缩到 FileOutputStream 中:

FileOutputStream out = new FileOutputStream(filename);
outputImage.compress(Bitmap.CompressFormat.PNG, 90, out);

内部存储也可以通过上下文检索。

File cacheDir = context.getCacheDir();
于 2012-07-22T10:47:23.907 回答