Как получить RGBA из образа Appcelerator для Android
Я пытаюсь получить доступ к пикселям RGBA локального изображения. Я разрабатываю с помощью Appcelerator Alloy и использую Hyperloop, и это мой код.
var myUri = Uri.parse(result.media.nativePath.toString());
var imgBitmapFactory = BitmapFactory.decodeFile(myUri.getPath());
var width = imgBitmapFactory.getWidth();
var height = imgBitmapFactory.getHeight();
var pixelsArray = [],
pixel = 0;
for (var x = 0; x < width; ++x) {
for (var y = 0; y < height; ++y) {
//get pixel Color
pixel = imgBitmapFactory.getPixel(x, y);
//push rgba color into array
pixelsArray.push(Color.red(pixel), Color.green(pixel), Color.blue(pixel), Color.alpha(pixel))
}
}
Все прекрасно работает до ширины = 10 и высоты = 10. С более высокой шириной и высотой петля становится очень медленной, и я получаю черный экран до завершения. Поэтому мой вопрос: знаете ли вы лучшую реализацию или оптимизацию этого кода? Я уже пытался использовать webview, HTML5 canvas и Inject JS, но ошибка Android (SafeBrowser....) не позволяет мне выполнить getImageData(). Я пытался также использовать
imgBitmapFactory.getPixels(new Array(width*height), 0, width, 0, 0, width, height)
Но я получаю эту ошибку:
[INFO] : zygote64: Background concurrent copying GC freed 3936(205KB) AllocSpace objects, 1(20KB) LOS objects, 32% free, 49MB/73MB, paused 205us total 176.914ms
[ERROR] : HyperloopProxy: (main) [12653,12653] Unable to resolve method call. Class: android.graphics.Bitmap, method name: getPixels, args: [[Ljava.lang.Object;@17c7597, 0, 4000, 0, 0, 4000, 3000]
[INFO] : null
[INFO] : Choreographer: Skipped 476 frames! The application may be doing too much work on its main thread.
Спасибо за вашу помощь!