feat:Image add pixel API,pass pixels directly to Image
This commit is contained in:
parent
62cb618923
commit
190eb4afd7
@ -20,7 +20,6 @@ import com.github.pengfeizhou.jscore.JSObject;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.WeakHashMap;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
@ -51,10 +50,17 @@ public class DoricResourceManager {
|
||||
String identifier = resource.getProperty("identifier").asString().value();
|
||||
DoricResource doricResource = cachedResources.get(resId);
|
||||
if (doricResource == null) {
|
||||
DoricResourceLoader loader = mResourceLoaders.get(type);
|
||||
if (loader != null) {
|
||||
doricResource = loader.load(doricContext, identifier);
|
||||
cachedResources.put(resId, doricResource);
|
||||
if ("arrayBuffer".equals(type)) {
|
||||
doricResource = new DoricArrayBufferResource(
|
||||
doricContext,
|
||||
resource.getProperty("data").asArrayBuffer().value()
|
||||
);
|
||||
} else {
|
||||
DoricResourceLoader loader = mResourceLoaders.get(type);
|
||||
if (loader != null) {
|
||||
doricResource = loader.load(doricContext, identifier);
|
||||
cachedResources.put(resId, doricResource);
|
||||
}
|
||||
}
|
||||
}
|
||||
return doricResource;
|
||||
|
@ -55,10 +55,14 @@ import com.facebook.yoga.YogaNode;
|
||||
import com.github.pengfeizhou.jscore.JSONBuilder;
|
||||
import com.github.pengfeizhou.jscore.JSObject;
|
||||
import com.github.pengfeizhou.jscore.JSValue;
|
||||
import com.github.pengfeizhou.jscore.JavaValue;
|
||||
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.InputStream;
|
||||
import java.security.MessageDigest;
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
import androidx.vectordrawable.graphics.drawable.Animatable2Compat;
|
||||
import pub.doric.DoricContext;
|
||||
@ -514,6 +518,17 @@ public class ImageNode extends ViewNode<ImageView> {
|
||||
callJSResponse(functionId);
|
||||
}
|
||||
};
|
||||
case "imagePixels":
|
||||
if (!prop.isObject()) {
|
||||
return;
|
||||
}
|
||||
int width = prop.asObject().getProperty("width").asNumber().toInt();
|
||||
int height = prop.asObject().getProperty("height").asNumber().toInt();
|
||||
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);
|
||||
@ -561,4 +576,34 @@ public class ImageNode extends ViewNode<ImageView> {
|
||||
errorImageBase64 = null;
|
||||
imageScale = DoricUtils.getScreenScale();
|
||||
}
|
||||
|
||||
@DoricMethod
|
||||
public JSONObject getImageInfo() {
|
||||
Drawable drawable = mView.getDrawable();
|
||||
if (drawable instanceof BitmapDrawable) {
|
||||
Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
|
||||
return new JSONBuilder()
|
||||
.put("width", bitmap.getWidth())
|
||||
.put("height", bitmap.getHeight())
|
||||
.toJSONObject();
|
||||
} else {
|
||||
return new JSONBuilder()
|
||||
.put("width", drawable.getIntrinsicWidth())
|
||||
.put("height", drawable.getIntrinsicHeight())
|
||||
.toJSONObject();
|
||||
}
|
||||
}
|
||||
|
||||
@DoricMethod
|
||||
public JavaValue getImagePixels() {
|
||||
Drawable drawable = mView.getDrawable();
|
||||
if (drawable instanceof BitmapDrawable) {
|
||||
Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
|
||||
ByteBuffer byteBuffer = ByteBuffer.allocate(bitmap.getByteCount());
|
||||
bitmap.copyPixelsToBuffer(byteBuffer);
|
||||
return new JavaValue(byteBuffer.array());
|
||||
} else {
|
||||
return new JavaValue();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -44,141 +44,141 @@ class ImageDemo extends Panel {
|
||||
heightSpec: LayoutSpec.FIT,
|
||||
},
|
||||
}),
|
||||
// image({
|
||||
// imageBase64: button,
|
||||
// scaleType: ScaleType.ScaleToFill,
|
||||
// layoutConfig: {
|
||||
// widthSpec: LayoutSpec.JUST,
|
||||
// heightSpec: LayoutSpec.JUST,
|
||||
// },
|
||||
// width: 200,
|
||||
// height: 150 / 2.75,
|
||||
// stretchInset: {
|
||||
// left: 100,
|
||||
// top: 0,
|
||||
// right: 100,
|
||||
// bottom: 0
|
||||
// },
|
||||
// imageScale: 2.75,
|
||||
// }),
|
||||
// image({
|
||||
// imageBase64: button,
|
||||
// scaleType: ScaleType.ScaleToFill,
|
||||
// layoutConfig: {
|
||||
// widthSpec: LayoutSpec.JUST,
|
||||
// heightSpec: LayoutSpec.JUST,
|
||||
// },
|
||||
// width: 200,
|
||||
// height: 75,
|
||||
// stretchInset: {
|
||||
// left: 100,
|
||||
// top: 0,
|
||||
// right: 100,
|
||||
// bottom: 0
|
||||
// },
|
||||
// imageScale: 2,
|
||||
image({
|
||||
imageBase64: button,
|
||||
scaleType: ScaleType.ScaleToFill,
|
||||
layoutConfig: {
|
||||
widthSpec: LayoutSpec.JUST,
|
||||
heightSpec: LayoutSpec.JUST,
|
||||
},
|
||||
width: 200,
|
||||
height: 150 / 2.75,
|
||||
stretchInset: {
|
||||
left: 100,
|
||||
top: 0,
|
||||
right: 100,
|
||||
bottom: 0
|
||||
},
|
||||
imageScale: 2.75,
|
||||
}),
|
||||
image({
|
||||
imageBase64: button,
|
||||
scaleType: ScaleType.ScaleToFill,
|
||||
layoutConfig: {
|
||||
widthSpec: LayoutSpec.JUST,
|
||||
heightSpec: LayoutSpec.JUST,
|
||||
},
|
||||
width: 200,
|
||||
height: 75,
|
||||
stretchInset: {
|
||||
left: 100,
|
||||
top: 0,
|
||||
right: 100,
|
||||
bottom: 0
|
||||
},
|
||||
imageScale: 2,
|
||||
|
||||
// }),
|
||||
// label('Gif '),
|
||||
// image({
|
||||
// imageUrl: "https://www.w3.org/People/mimasa/test/imgformat/img/w3c_home_animation.gif",
|
||||
// scaleType: ScaleType.ScaleToFill,
|
||||
// imageScale: 3,
|
||||
// }),
|
||||
// label('APNG'),
|
||||
// image({
|
||||
// imageUrl: "https://upload.wikimedia.org/wikipedia/commons/1/14/Animated_PNG_example_bouncing_beach_ball.png",
|
||||
// }),
|
||||
// label('Animated WebP'),
|
||||
// image({
|
||||
// imageUrl: "https://p.upyun.com/demo/webp/webp/animated-gif-0.webp",
|
||||
}),
|
||||
label('Gif '),
|
||||
image({
|
||||
imageUrl: "https://www.w3.org/People/mimasa/test/imgformat/img/w3c_home_animation.gif",
|
||||
scaleType: ScaleType.ScaleToFill,
|
||||
imageScale: 3,
|
||||
}),
|
||||
label('APNG'),
|
||||
image({
|
||||
imageUrl: "https://upload.wikimedia.org/wikipedia/commons/1/14/Animated_PNG_example_bouncing_beach_ball.png",
|
||||
}),
|
||||
label('Animated WebP'),
|
||||
image({
|
||||
imageUrl: "https://p.upyun.com/demo/webp/webp/animated-gif-0.webp",
|
||||
|
||||
// }),
|
||||
// label('WebP'),
|
||||
// imageView = image({
|
||||
// imageUrl: "https://p.upyun.com/demo/webp/webp/jpg-0.webp",
|
||||
// layoutConfig: layoutConfig().just(),
|
||||
// width: 200,
|
||||
// height: 200,
|
||||
// loadCallback: (ret) => {
|
||||
// if (ret) {
|
||||
// imageView.width = ret.width
|
||||
// imageView.height = ret.height
|
||||
// }
|
||||
// }
|
||||
// }),
|
||||
// label('ScaleToFill'),
|
||||
// image({
|
||||
// imageUrl,
|
||||
// width: 300,
|
||||
// height: 300,
|
||||
// isBlur: true,
|
||||
// border: {
|
||||
// width: 2,
|
||||
// color: Color.GRAY,
|
||||
// },
|
||||
// scaleType: ScaleType.ScaleToFill,
|
||||
// layoutConfig: layoutConfig().just(),
|
||||
// loadCallback: (ret) => {
|
||||
// }
|
||||
// }),
|
||||
// label('ScaleAspectFit'),
|
||||
// image({
|
||||
// imageUrl,
|
||||
// width: 300,
|
||||
// height: 300,
|
||||
// border: {
|
||||
// width: 2,
|
||||
// color: Color.GRAY,
|
||||
// },
|
||||
// scaleType: ScaleType.ScaleAspectFit,
|
||||
// layoutConfig: layoutConfig().just(),
|
||||
// }),
|
||||
// label('ScaleAspectFill'),
|
||||
// image({
|
||||
// imageUrl,
|
||||
// width: 300,
|
||||
// height: 300,
|
||||
// border: {
|
||||
// width: 2,
|
||||
// color: Color.GRAY,
|
||||
// },
|
||||
// scaleType: ScaleType.ScaleAspectFill,
|
||||
// layoutConfig: layoutConfig().just(),
|
||||
// }),
|
||||
// label('ImageBase64'),
|
||||
// image({
|
||||
// imageBase64: img_base64[0],
|
||||
// width: 300,
|
||||
// height: 300,
|
||||
// border: {
|
||||
// width: 2,
|
||||
// color: Color.GRAY,
|
||||
// },
|
||||
// scaleType: ScaleType.ScaleAspectFill,
|
||||
// layoutConfig: layoutConfig().just(),
|
||||
// }),
|
||||
// label('StretchInset'),
|
||||
// image({
|
||||
// imageBase64: img_base64[1],
|
||||
// height: 60,
|
||||
// width: 134,
|
||||
// scaleType: ScaleType.ScaleAspectFill,
|
||||
// layoutConfig: layoutConfig().just(),
|
||||
// }),
|
||||
// image({
|
||||
// imageBase64: img_base64[1],
|
||||
// height: 60,
|
||||
// width: 294,
|
||||
// scaleType: ScaleType.ScaleToFill,
|
||||
// layoutConfig: layoutConfig().just(),
|
||||
// stretchInset: {
|
||||
// left: 0.85,
|
||||
// top: 0,
|
||||
// right: 0.149,
|
||||
// bottom: 0
|
||||
// }
|
||||
// }),
|
||||
}),
|
||||
label('WebP'),
|
||||
imageView = image({
|
||||
imageUrl: "https://p.upyun.com/demo/webp/webp/jpg-0.webp",
|
||||
layoutConfig: layoutConfig().just(),
|
||||
width: 200,
|
||||
height: 200,
|
||||
loadCallback: (ret) => {
|
||||
if (ret) {
|
||||
imageView.width = ret.width
|
||||
imageView.height = ret.height
|
||||
}
|
||||
}
|
||||
}),
|
||||
label('ScaleToFill'),
|
||||
image({
|
||||
imageUrl,
|
||||
width: 300,
|
||||
height: 300,
|
||||
isBlur: true,
|
||||
border: {
|
||||
width: 2,
|
||||
color: Color.GRAY,
|
||||
},
|
||||
scaleType: ScaleType.ScaleToFill,
|
||||
layoutConfig: layoutConfig().just(),
|
||||
loadCallback: (ret) => {
|
||||
}
|
||||
}),
|
||||
label('ScaleAspectFit'),
|
||||
image({
|
||||
imageUrl,
|
||||
width: 300,
|
||||
height: 300,
|
||||
border: {
|
||||
width: 2,
|
||||
color: Color.GRAY,
|
||||
},
|
||||
scaleType: ScaleType.ScaleAspectFit,
|
||||
layoutConfig: layoutConfig().just(),
|
||||
}),
|
||||
label('ScaleAspectFill'),
|
||||
image({
|
||||
imageUrl,
|
||||
width: 300,
|
||||
height: 300,
|
||||
border: {
|
||||
width: 2,
|
||||
color: Color.GRAY,
|
||||
},
|
||||
scaleType: ScaleType.ScaleAspectFill,
|
||||
layoutConfig: layoutConfig().just(),
|
||||
}),
|
||||
label('ImageBase64'),
|
||||
image({
|
||||
imageBase64: img_base64[0],
|
||||
width: 300,
|
||||
height: 300,
|
||||
border: {
|
||||
width: 2,
|
||||
color: Color.GRAY,
|
||||
},
|
||||
scaleType: ScaleType.ScaleAspectFill,
|
||||
layoutConfig: layoutConfig().just(),
|
||||
}),
|
||||
label('StretchInset'),
|
||||
image({
|
||||
imageBase64: img_base64[1],
|
||||
height: 60,
|
||||
width: 134,
|
||||
scaleType: ScaleType.ScaleAspectFill,
|
||||
layoutConfig: layoutConfig().just(),
|
||||
}),
|
||||
image({
|
||||
imageBase64: img_base64[1],
|
||||
height: 60,
|
||||
width: 294,
|
||||
scaleType: ScaleType.ScaleToFill,
|
||||
layoutConfig: layoutConfig().just(),
|
||||
stretchInset: {
|
||||
left: 0.85,
|
||||
top: 0,
|
||||
right: 0.149,
|
||||
bottom: 0
|
||||
}
|
||||
}),
|
||||
],
|
||||
{
|
||||
layoutConfig: layoutConfig().most().configHeight(LayoutSpec.FIT),
|
||||
|
@ -13,8 +13,6 @@ import {
|
||||
VLayout,
|
||||
Text,
|
||||
Gravity,
|
||||
resourceLoader,
|
||||
imageDecoder,
|
||||
createRef,
|
||||
loge,
|
||||
} from "doric";
|
||||
@ -25,6 +23,21 @@ import { img_base64 } from "./image_base64";
|
||||
export class ResourceDemo extends Panel {
|
||||
build(root: Group): void {
|
||||
const iv = createRef<Image>();
|
||||
async function click() {
|
||||
const imageInfo = await iv.current.getImageInfo(context);
|
||||
loge(imageInfo);
|
||||
const pixels = await iv.current.getImagePixels(context);
|
||||
loge(pixels.byteLength);
|
||||
const data = new Uint8Array(pixels);
|
||||
for (let i = 0; i < data.length - 4; i += 4) {
|
||||
data[i + 3] = 12;
|
||||
}
|
||||
iv.current.imagePixels = {
|
||||
width: imageInfo.width,
|
||||
height: imageInfo.height,
|
||||
pixels: pixels,
|
||||
};
|
||||
}
|
||||
<Scroller parent={root} layoutConfig={layoutConfig().most()}>
|
||||
<VLayout
|
||||
layoutConfig={layoutConfig().mostWidth().fitHeight()}
|
||||
@ -39,7 +52,7 @@ export class ResourceDemo extends Panel {
|
||||
textAlignment={Gravity.Center}
|
||||
height={50}
|
||||
>
|
||||
Image Demo
|
||||
Resource Demo
|
||||
</Text>
|
||||
{label("Button")}
|
||||
<Image
|
||||
@ -50,30 +63,15 @@ export class ResourceDemo extends Panel {
|
||||
}
|
||||
/>
|
||||
<Image
|
||||
ref={iv}
|
||||
image={
|
||||
new RemoteResource("https://p.upyun.com/demo/webp/webp/jpg-0.webp")
|
||||
}
|
||||
/>
|
||||
<Image
|
||||
image={new Base64Resource(img_base64[0])}
|
||||
ref={iv}
|
||||
onClick={async () => {
|
||||
const resource = new RemoteResource(
|
||||
"https://p.upyun.com/demo/webp/webp/jpg-0.webp"
|
||||
);
|
||||
const rawData = await resourceLoader(context).load(resource);
|
||||
loge(rawData.byteLength);
|
||||
const imageInfo = await imageDecoder(context).getImageInfo(
|
||||
resource
|
||||
);
|
||||
loge(imageInfo);
|
||||
const pixels = await imageDecoder(context).decodeToPixels(resource);
|
||||
const unit8Array = new Uint8Array(pixels);
|
||||
for (let i = 0; i < unit8Array.length; i += 4) {
|
||||
unit8Array[i] -= 20;
|
||||
}
|
||||
loge(pixels.byteLength);
|
||||
iv.current.image = resource;
|
||||
await click();
|
||||
}}
|
||||
/>
|
||||
</VLayout>
|
||||
|
@ -2248,10 +2248,20 @@ var BundleResource = /** @class */ (function (_super) {
|
||||
=======
|
||||
}(Resource));
|
||||
var ArrayBufferResource = /** @class */ (function (_super) {
|
||||
__extends$e(ArrayBufferResource, _super);
|
||||
__extends$f(ArrayBufferResource, _super);
|
||||
function ArrayBufferResource(data) {
|
||||
return _super.call(this, "arrayBuffer", "") || this;
|
||||
var _this = _super.call(this, "arrayBuffer", "") || this;
|
||||
_this.data = data;
|
||||
return _this;
|
||||
}
|
||||
ArrayBufferResource.prototype.toModel = function () {
|
||||
return {
|
||||
data: this.data,
|
||||
resId: this.resId,
|
||||
type: this.type,
|
||||
identifier: this.identifier,
|
||||
};
|
||||
};
|
||||
return ArrayBufferResource;
|
||||
}(Resource));
|
||||
>>>>>>> f476a5b0... feat:android support ArrayBuffer Resource
|
||||
@ -2300,6 +2310,16 @@ var Image = /** @class */ (function (_super) {
|
||||
Image.prototype.stopAnimating = function (context) {
|
||||
return this.nativeChannel(context, "stopAnimating")();
|
||||
};
|
||||
Image.prototype.getImageInfo = function (context) {
|
||||
return this.nativeChannel(context, "getImageInfo")();
|
||||
};
|
||||
Image.prototype.getImagePixels = function (context) {
|
||||
return this.nativeChannel(context, "getImagePixels")();
|
||||
};
|
||||
__decorate$b([
|
||||
Property,
|
||||
__metadata$b("design:type", Object)
|
||||
], Image.prototype, "imagePixels", void 0);
|
||||
__decorate$b([
|
||||
Property,
|
||||
__metadata$b("design:type", Resource)
|
||||
|
@ -1683,6 +1683,15 @@ class BundleResource extends iOSResource {
|
||||
class ArrayBufferResource extends Resource {
|
||||
constructor(data) {
|
||||
super("arrayBuffer", "");
|
||||
this.data = data;
|
||||
}
|
||||
toModel() {
|
||||
return {
|
||||
data: this.data,
|
||||
resId: this.resId,
|
||||
type: this.type,
|
||||
identifier: this.identifier,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@ -1711,7 +1720,17 @@ class Image extends View {
|
||||
stopAnimating(context) {
|
||||
return this.nativeChannel(context, "stopAnimating")();
|
||||
}
|
||||
getImageInfo(context) {
|
||||
return this.nativeChannel(context, "getImageInfo")();
|
||||
}
|
||||
getImagePixels(context) {
|
||||
return this.nativeChannel(context, "getImagePixels")();
|
||||
}
|
||||
}
|
||||
__decorate$b([
|
||||
Property,
|
||||
__metadata$b("design:type", Object)
|
||||
], Image.prototype, "imagePixels", void 0);
|
||||
__decorate$b([
|
||||
Property,
|
||||
__metadata$b("design:type", Resource)
|
||||
|
@ -3211,6 +3211,15 @@ class BundleResource extends iOSResource {
|
||||
class ArrayBufferResource extends Resource {
|
||||
constructor(data) {
|
||||
super("arrayBuffer", "");
|
||||
this.data = data;
|
||||
}
|
||||
toModel() {
|
||||
return {
|
||||
data: this.data,
|
||||
resId: this.resId,
|
||||
type: this.type,
|
||||
identifier: this.identifier,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@ -3239,7 +3248,17 @@ class Image extends View {
|
||||
stopAnimating(context) {
|
||||
return this.nativeChannel(context, "stopAnimating")();
|
||||
}
|
||||
getImageInfo(context) {
|
||||
return this.nativeChannel(context, "getImageInfo")();
|
||||
}
|
||||
getImagePixels(context) {
|
||||
return this.nativeChannel(context, "getImagePixels")();
|
||||
}
|
||||
}
|
||||
__decorate$b([
|
||||
Property,
|
||||
__metadata$b("design:type", Object)
|
||||
], Image.prototype, "imagePixels", void 0);
|
||||
__decorate$b([
|
||||
Property,
|
||||
__metadata$b("design:type", Resource)
|
||||
|
21
doric-js/index.d.ts
vendored
21
doric-js/index.d.ts
vendored
@ -626,6 +626,14 @@ declare module 'doric/lib/src/widget/image' {
|
||||
ScaleAspectFill = 2
|
||||
}
|
||||
export class Image extends View {
|
||||
/**
|
||||
* Set pixels for image directly
|
||||
*/
|
||||
imagePixels?: {
|
||||
width: number;
|
||||
height: number;
|
||||
pixels: ArrayBuffer;
|
||||
};
|
||||
/**
|
||||
* This could be loaded by customized resource loader
|
||||
*/
|
||||
@ -699,6 +707,12 @@ declare module 'doric/lib/src/widget/image' {
|
||||
isAnimating(context: BridgeContext): Promise<boolean>;
|
||||
startAnimating(context: BridgeContext): Promise<any>;
|
||||
stopAnimating(context: BridgeContext): Promise<any>;
|
||||
getImageInfo(context: BridgeContext): Promise<{
|
||||
width: number;
|
||||
height: number;
|
||||
mimeType: string;
|
||||
}>;
|
||||
getImagePixels(context: BridgeContext): Promise<ArrayBuffer>;
|
||||
}
|
||||
export function image(config: Partial<Image>): Image;
|
||||
}
|
||||
@ -1751,7 +1765,14 @@ declare module 'doric/lib/src/util/resource' {
|
||||
constructor(bundleName: string, fileName: string);
|
||||
}
|
||||
export class ArrayBufferResource extends Resource {
|
||||
data: ArrayBuffer;
|
||||
constructor(data: ArrayBuffer);
|
||||
toModel(): {
|
||||
data: ArrayBuffer;
|
||||
resId: string;
|
||||
type: string;
|
||||
identifier: string;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
7
doric-js/lib/src/util/resource.d.ts
vendored
7
doric-js/lib/src/util/resource.d.ts
vendored
@ -51,5 +51,12 @@ export declare class BundleResource extends iOSResource {
|
||||
constructor(bundleName: string, fileName: string);
|
||||
}
|
||||
export declare class ArrayBufferResource extends Resource {
|
||||
data: ArrayBuffer;
|
||||
constructor(data: ArrayBuffer);
|
||||
toModel(): {
|
||||
data: ArrayBuffer;
|
||||
resId: string;
|
||||
type: string;
|
||||
identifier: string;
|
||||
};
|
||||
}
|
||||
|
@ -74,5 +74,14 @@ export class BundleResource extends iOSResource {
|
||||
export class ArrayBufferResource extends Resource {
|
||||
constructor(data) {
|
||||
super("arrayBuffer", "");
|
||||
this.data = data;
|
||||
}
|
||||
toModel() {
|
||||
return {
|
||||
data: this.data,
|
||||
resId: this.resId,
|
||||
type: this.type,
|
||||
identifier: this.identifier,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
14
doric-js/lib/src/widget/image.d.ts
vendored
14
doric-js/lib/src/widget/image.d.ts
vendored
@ -8,6 +8,14 @@ export declare enum ScaleType {
|
||||
ScaleAspectFill = 2
|
||||
}
|
||||
export declare class Image extends View {
|
||||
/**
|
||||
* Set pixels for image directly
|
||||
*/
|
||||
imagePixels?: {
|
||||
width: number;
|
||||
height: number;
|
||||
pixels: ArrayBuffer;
|
||||
};
|
||||
/**
|
||||
* This could be loaded by customized resource loader
|
||||
*/
|
||||
@ -81,5 +89,11 @@ export declare class Image extends View {
|
||||
isAnimating(context: BridgeContext): Promise<boolean>;
|
||||
startAnimating(context: BridgeContext): Promise<any>;
|
||||
stopAnimating(context: BridgeContext): Promise<any>;
|
||||
getImageInfo(context: BridgeContext): Promise<{
|
||||
width: number;
|
||||
height: number;
|
||||
mimeType: string;
|
||||
}>;
|
||||
getImagePixels(context: BridgeContext): Promise<ArrayBuffer>;
|
||||
}
|
||||
export declare function image(config: Partial<Image>): Image;
|
||||
|
@ -42,7 +42,17 @@ export class Image extends View {
|
||||
stopAnimating(context) {
|
||||
return this.nativeChannel(context, "stopAnimating")();
|
||||
}
|
||||
getImageInfo(context) {
|
||||
return this.nativeChannel(context, "getImageInfo")();
|
||||
}
|
||||
getImagePixels(context) {
|
||||
return this.nativeChannel(context, "getImagePixels")();
|
||||
}
|
||||
}
|
||||
__decorate([
|
||||
Property,
|
||||
__metadata("design:type", Object)
|
||||
], Image.prototype, "imagePixels", void 0);
|
||||
__decorate([
|
||||
Property,
|
||||
__metadata("design:type", Resource)
|
||||
|
@ -85,8 +85,17 @@ export class BundleResource extends iOSResource {
|
||||
}
|
||||
|
||||
export class ArrayBufferResource extends Resource {
|
||||
data: ArrayBuffer
|
||||
constructor(data: ArrayBuffer) {
|
||||
super("arrayBuffer", "")
|
||||
this.data = data
|
||||
}
|
||||
toModel() {
|
||||
return {
|
||||
data: this.data,
|
||||
resId: this.resId,
|
||||
type: this.type,
|
||||
identifier: this.identifier,
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -26,6 +26,11 @@ export enum ScaleType {
|
||||
}
|
||||
|
||||
export class Image extends View {
|
||||
/**
|
||||
* Set pixels for image directly
|
||||
*/
|
||||
@Property
|
||||
imagePixels?: { width: number, height: number, pixels: ArrayBuffer }
|
||||
/**
|
||||
* This could be loaded by customized resource loader
|
||||
*/
|
||||
@ -132,6 +137,18 @@ export class Image extends View {
|
||||
stopAnimating(context: BridgeContext) {
|
||||
return this.nativeChannel(context, "stopAnimating")()
|
||||
}
|
||||
|
||||
getImageInfo(context: BridgeContext): Promise<{
|
||||
width: number,
|
||||
height: number,
|
||||
mimeType: string,
|
||||
}> {
|
||||
return this.nativeChannel(context, "getImageInfo")()
|
||||
}
|
||||
|
||||
getImagePixels(context: BridgeContext): Promise<ArrayBuffer> {
|
||||
return this.nativeChannel(context, "getImagePixels")()
|
||||
}
|
||||
}
|
||||
|
||||
export function image(config: Partial<Image>) {
|
||||
|
19
doric-web/dist/index.js
vendored
19
doric-web/dist/index.js
vendored
@ -3285,6 +3285,15 @@ class BundleResource extends iOSResource {
|
||||
class ArrayBufferResource extends Resource {
|
||||
constructor(data) {
|
||||
super("arrayBuffer", "");
|
||||
this.data = data;
|
||||
}
|
||||
toModel() {
|
||||
return {
|
||||
data: this.data,
|
||||
resId: this.resId,
|
||||
type: this.type,
|
||||
identifier: this.identifier,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@ -3313,7 +3322,17 @@ class Image extends View {
|
||||
stopAnimating(context) {
|
||||
return this.nativeChannel(context, "stopAnimating")();
|
||||
}
|
||||
getImageInfo(context) {
|
||||
return this.nativeChannel(context, "getImageInfo")();
|
||||
}
|
||||
getImagePixels(context) {
|
||||
return this.nativeChannel(context, "getImagePixels")();
|
||||
}
|
||||
}
|
||||
__decorate$b([
|
||||
Property,
|
||||
__metadata$b("design:type", Object)
|
||||
], Image.prototype, "imagePixels", void 0);
|
||||
__decorate$b([
|
||||
Property,
|
||||
__metadata$b("design:type", Resource)
|
||||
|
4
doric-web/dist/index.js.map
vendored
4
doric-web/dist/index.js.map
vendored
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user