Конвертировать BLOB в растровое изображение в Appcelerator Titanium - PullRequest
0 голосов
/ 05 октября 2018

У меня есть блоб изображения и я хочу преобразовать его в растровое изображение, чтобы использовать Android Canvas, Path и Paint в appcelerator Titanium.Я просмотрел документы appcelerator, но не смог найти метод, который позволял бы мне конвертировать напрямую.Я попытался преобразовать BLOB-объект в строку Base64, а затем создать растровый объект, используя нативные методы Android с помощью Hyperloop, но безуспешно.

Затем я попытался преобразовать 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); 

1 Ответ

0 голосов
/ 05 октября 2018

Обновленные примеры:

var Activity = require('android.app.Activity')
var ImageView = require('android.widget.ImageView');
var Base64 = require('android.util.Base64');
var BitmapFactory = require('android.graphics.BitmapFactory');
var activity = new Activity(Ti.Android.currentActivity);
var RenderScript = require("android.renderscript.RenderScript");
var Allocation = require("android.renderscript.Allocation");
var Element = require("android.renderscript.Element");
var ScriptIntrinsicBlur = require("android.renderscript.ScriptIntrinsicBlur");

$.img.addEventListener("load", function() {
    $.img.toImage(function(blob) {
        var encodeByte = Base64.decode(blob.toBase64(), Base64.NO_WRAP)
        var bmp = BitmapFactory.decodeByteArray(encodeByte, 0, encodeByte.length);

        const bmpOut = bmp.copy(bmp.getConfig(), true);
        const rs = RenderScript.create(activity);
        const blurScript = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
        const allIn = Allocation.createFromBitmap(rs, bmp);
        const allOut = Allocation.createFromBitmap(rs, bmpOut);

        blurScript.setRadius(2.0);
        blurScript.setInput(allIn);
        blurScript.forEach(allOut);
        allOut.copyTo(bmpOut);
        bmp.recycle();
        rs.destroy();

        var image = new ImageView(activity);
        $.index.add(image);
        image.setImageBitmap(bmpOut);
    })
})

$.index.open();

index.xml:

<Alloy>
    <Window class="container">
        <ImageView id="img" image="/images/DefaultIcon.png" />
    </Window>
</Alloy>

bmp будет растровым изображением из ImageView, к нему будет применено размытие и добавлено его кокно снова.

...