【发布时间】:2018-10-05 12:55:25
【问题描述】:
我有一个图像的 Blob,想将其转换为位图图像,以便在 appcelerator Titanium 中使用 android Canvas、Path 和 Paint。 我浏览了 appcelerator 文档,但找不到任何允许我直接转换的方法。 我尝试将 blob 转换为 Base64 字符串,然后通过 hyperloop 使用 android 本机方法创建位图对象,但未成功。
然后我尝试将 base64 转换为字节数组并使用此代码通过 Hyperloop 创建位图,但位图为空:
var BitmapFactory = require('android.graphics.BitmapFactory');
var ByteArrayInputStream = require("java.io.ByteArrayInputStream");
var stringToSaveInDatabase = Ti.Utils.base64encode(newBlob).toString();
var bytes = [];
for (var k = 0; k < stringToSaveInDatabase.length; k++) {
bytes.push(stringToSaveInDatabase.charCodeAt(k));
}
var arrayInputStream = new ByteArrayInputStream(bytes);
var bitmap = BitmapFactory.decodeStream(arrayInputStream);
【问题讨论】:
-
抱歉,我的示例无法正常工作,因为我使用了自定义 SDK。像这样转换为 ByteArray 可以正常工作:
var istream = new ByteArrayInputStream(new String(blob.toBase64().toString()).getBytes(StandardCharsets.UTF_8)); console.log("istream: " + istream); console.log("bmp: " + BitmapFactory.decodeStream(istream));但 decodeStream 最后返回null。在您的示例中也可能是这种情况。您可以先保存图像,然后使用它来加载该资源:jira.appcelerator.org/browse/… -
是的,尽管内存中存在 blob 对象,但我得到了 null。我发现这个类 docs.appcelerator.com/module-apidoc/latest/android/… 它有方法:fromBlob(Activity activity, TiBlob blob) 和 getBitmap() 可以让我从blob 到位图,但我不知道如何访问这个类。我试过 require("org.appcelerator.titanium.view.TiDrawableReference") 但我收到错误 Requested module not found。你知道如何访问这个类并使用它的方法吗?
-
jira.appcelerator.org/browse/… 不支持访问核心 ti 类
标签: android titanium appcelerator titanium-mobile appcelerator-titanium