【问题标题】:Android: Best Way to Programmatically Make an Image and Save it to a Bitmap?Android:以编程方式制作图像并将其保存到位图的最佳方法?
【发布时间】:2019-11-22 02:15:36
【问题描述】:

我有一个连接到外部打印机设备的应用程序,我需要获取一些用户数据并动态制作图像并打印它。打印机 API 需要位图作为打印输入。请注意,我从不想将程序创建的图像绘制到屏幕上;图像的生成和打印没有可见的 UI,它发生在后台。

到目前为止,我考虑过以下方式之一:

1) 制作画布,从不调用绘图函数,将其转换为位图然后打印(有点偏离使用 Canvas API 的预期方式)

2) 制作一个隐藏的 ImageView xml 布局,从不使其可见,将其转换为位图然后打印(这可能会变得很棘手,因为我可能必须将它包含在 Activity 的布局中某处以动态编辑它,但是消耗资源,感觉效率低下)

您对最佳方法有何看法?我考虑过的两种方法中的任何一种都感觉有点老套,让我渴望一个用于自定义图像生成的专用 API。

【问题讨论】:

  • A Canvas 只是吸引到 Bitmap。没有要求或期望 Bitmap 会被绘制到屏幕上。但是,您将不得不使用Canvasdraw*() 方法,因此我不确定您为什么要避免使用这些方法,或者为什么这似乎不是Canvas 的预期用法。跨度>
  • 我对 Canvas 的研究不够;我没有意识到绘图方法并没有尝试在布局中绘制到 Canvas。这似乎是最好的方法。

标签: android image imageview android-canvas dynamic-image-generation


【解决方案1】:

最符合平台的解决方案是采用 Canvas 方法。

首先,您应该创建所需尺寸的位图并将其传递给Canvas(Bitmap) 构造函数。然后你在画布上绘制你需要的任何东西,并保留对位图的引用,以便在整个应用程序中使用任何你需要的地方(在我的例子中,它被发送到打印机)。

来自Android Docs对于视图层次结构的一小部分或单个视图的软件渲染快照,建议从位图或图片创建画布并在视图上调用 draw(android.graphics.Canvas)。

示例代码:

bitmap = Bitmap.createBitmap(LABEL_SIDE_LENGTH, LABEL_SIDE_LENGTH, Bitmap.Config.ARGB_8888)

下一步[在override fun draw(canvas: Canvas)] 中设置画布的位图,如下所示;

canvas.setBitmap(bitmap).

您保留对bitmap 的引用,它可以在您需要的任何地方使用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    • 2011-11-27
    • 2011-12-10
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多