feat: Image add setImagePixels API,iOS receive ArrayBuffer directly
This commit is contained in:
@@ -71,6 +71,7 @@ import pub.doric.DoricContext;
|
||||
import pub.doric.async.AsyncResult;
|
||||
import pub.doric.extension.bridge.DoricMethod;
|
||||
import pub.doric.extension.bridge.DoricPlugin;
|
||||
import pub.doric.extension.bridge.DoricPromise;
|
||||
import pub.doric.resource.DoricResource;
|
||||
import pub.doric.shader.flex.FlexNode;
|
||||
import pub.doric.utils.DoricLog;
|
||||
@@ -527,43 +528,11 @@ public class ImageNode extends ViewNode<ImageView> {
|
||||
final int width = prop.asObject().getProperty("width").asNumber().toInt();
|
||||
final int height = prop.asObject().getProperty("height").asNumber().toInt();
|
||||
JSValue pixelsValue = prop.asObject().getProperty("pixels");
|
||||
if (pixelsValue.isArrayBuffer()) {
|
||||
byte[] pixels = prop.asObject().getProperty("pixels").asArrayBuffer().value();
|
||||
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
|
||||
ByteBuffer byteBuffer = ByteBuffer.wrap(pixels);
|
||||
bitmap.copyPixelsFromBuffer(byteBuffer);
|
||||
view.setImageBitmap(bitmap);
|
||||
} else if (pixelsValue.isString()) {
|
||||
String pixelsCallbackId = pixelsValue.asString().value();
|
||||
callJSResponse(pixelsCallbackId).setCallback(new AsyncResult.Callback<JSDecoder>() {
|
||||
@Override
|
||||
public void onResult(JSDecoder result) {
|
||||
try {
|
||||
JSValue value = result.decode();
|
||||
if (value.isArrayBuffer()) {
|
||||
byte[] pixels = value.asArrayBuffer().value();
|
||||
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
|
||||
ByteBuffer byteBuffer = ByteBuffer.wrap(pixels);
|
||||
bitmap.copyPixelsFromBuffer(byteBuffer);
|
||||
view.setImageBitmap(bitmap);
|
||||
}
|
||||
} catch (ArchiveException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Throwable t) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFinish() {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
byte[] pixels = prop.asObject().getProperty("pixels").asArrayBuffer().value();
|
||||
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
|
||||
ByteBuffer byteBuffer = ByteBuffer.wrap(pixels);
|
||||
bitmap.copyPixelsFromBuffer(byteBuffer);
|
||||
view.setImageBitmap(bitmap);
|
||||
break;
|
||||
default:
|
||||
super.blend(view, name, prop);
|
||||
@@ -641,4 +610,17 @@ public class ImageNode extends ViewNode<ImageView> {
|
||||
return new JavaValue();
|
||||
}
|
||||
}
|
||||
|
||||
@DoricMethod
|
||||
public void setImagePixels(JSObject imagePixels, DoricPromise promise) {
|
||||
final int width = imagePixels.asObject().getProperty("width").asNumber().toInt();
|
||||
final int height = imagePixels.asObject().getProperty("height").asNumber().toInt();
|
||||
JSValue pixelsValue = imagePixels.asObject().getProperty("pixels");
|
||||
byte[] pixels = imagePixels.asObject().getProperty("pixels").asArrayBuffer().value();
|
||||
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
|
||||
ByteBuffer byteBuffer = ByteBuffer.wrap(pixels);
|
||||
bitmap.copyPixelsFromBuffer(byteBuffer);
|
||||
mView.setImageBitmap(bitmap);
|
||||
promise.resolve();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user