【问题标题】:Saved bitmap is just blank file保存的位图只是空白文件
【发布时间】: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


【解决方案1】:

您必须在自定义视图中创建自己的 Canvas 并在其中绘制:

mCanvas = new Canvas(bitmap);

在你的 ondraw() 中

mCanvas.drawPoint(parm1, parm2, param3);

问题是你没有在正确的画布上画画。

【讨论】:

  • 那部分进展顺利。我不能使用drawPoints(...),因为我需要在每次迭代时更改paint。问题不在于绘图,而在于我保存 bitmap 时得到的图片,该图片是 Canvas 绘图。图片只是空白,没有我在那里画的那些点。
  • 我想说的是你画​​错了画布。为什么你说你不能使用 drawPoint() ?你在你的代码中使用它。您正在 onDraw 给您的画布上绘图,因此它与您的位图分离
  • 所以当我想要显示的位图时,我需要获取该视图的位图?
  • 是的,当那个人点击按钮时,你返回你的位图 (view.getBitmap())。
  • 好的,问题正是你所建议的。我以此为参考来纠正它stackoverflow.com/a/9595919/5465676。谢谢!当你编辑它时我会接受你的答案,现在还不清楚解决方案是什么。
猜你喜欢
  • 2014-06-18
  • 1970-01-01
  • 2020-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 1970-01-01
  • 2019-08-06
相关资源
最近更新 更多