在Android中,保存图像太慢的问题可能是由于在主线程上执行繁重的图像保存操作导致的。为了解决这个问题,可以将图像保存操作放在后台线程中执行。下面是一个使用AsyncTask来保存图像的示例代码:
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Environment;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class SaveImageTask extends AsyncTask {
private SaveImageListener mListener;
public interface SaveImageListener {
void onSaveComplete(boolean success);
}
public SaveImageTask(SaveImageListener listener) {
mListener = listener;
}
@Override
protected Boolean doInBackground(Bitmap... bitmaps) {
Bitmap image = bitmaps[0];
File directory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
File file = new File(directory, "image.jpg");
FileOutputStream outStream = null;
try {
outStream = new FileOutputStream(file);
image.compress(Bitmap.CompressFormat.JPEG, 100, outStream);
outStream.flush();
outStream.close();
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
} finally {
if (outStream != null) {
try {
outStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
@Override
protected void onPostExecute(Boolean success) {
if (mListener != null) {
mListener.onSaveComplete(success);
}
}
}
要保存图像,只需创建一个SaveImageTask对象,并调用execute()方法传入要保存的Bitmap对象。在onSaveComplete()方法中,可以处理保存完成后的逻辑。
Bitmap image = BitmapFactory.decodeResource(getResources(), R.drawable.my_image);
SaveImageTask saveImageTask = new SaveImageTask(new SaveImageTask.SaveImageListener() {
@Override
public void onSaveComplete(boolean success) {
if (success) {
// 图像保存成功
} else {
// 图像保存失败
}
}
});
saveImageTask.execute(image);
在AndroidManifest.xml文件中添加以下权限:
这样,图像保存操作将在后台线程中执行,避免阻塞主线程。
上一篇:保存图像数组的OpenCV