【发布时间】:2016-02-26 21:49:06
【问题描述】:
在我的应用程序中,我在 Canvas 上绘图。当用户单击保存图标时,我检索正在绘制的位图画布并将其保存为 PNG 文件。一切正常,只是图片是空白的。当另存为 JPEG 时,它只是全黑。
画布代码
private Bitmap bitmap;
@Override
protected void onSizeChanged(int w, int h, int oldW, int oldH) {
super.onSizeChanged(w, h, oldW, oldH);
bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
canvas = new Canvas(bitmap);
}
public Bitmap getBitmap() {
return bitmap;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
float x;
float y;
for(int i = table.length - 1; i >= 0; i--) {
x = table[i][0];
y = table[i][1];
alpha = (int) table[i][2];
paint.setAlpha(alpha);
canvas.drawPoint(x, y, paint);
}
}
Activity 只是调用 AsyncTask,所以我不会在这里发布它。 这是异步任务
@Override
protected Boolean doInBackground(Bitmap... params) {
Bitmap bitmap = params[0];
FileOutputStream outStream = null;
String filename = name + ".png";
String dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString();
File file = new File(dir, filename);
try {
outStream = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, outStream);
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
if (outStream != null) {
outStream.flush();
outStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return true;
}
编辑
添加 onDraw() 方法
【问题讨论】:
-
你能把你的ondraw()方法放上去吗
-
你能解释一下你期望你的“画布代码”如何工作吗?我很难弄清楚你打算在那里做什么。此外,您的 AsyncTask 似乎与您的画布代码完全无关。
-
好吧,我只是从表格中绘制点。我已将
bitmap设置为 Canvas 正在绘制的位图。所以我假设当我将bitmap保存为图片时,这些点将是可见的。代码没有问题,只是不明白为什么,当我把那个位图保存为图片的时候,图片是空白的。
标签: android image-processing bitmap