首页 > 其他分享 >Flutter OHOS 外接纹理适配简介 - 图片显示

Flutter OHOS 外接纹理适配简介 - 图片显示

时间:2024-11-14 08:58:11浏览次数:1  
标签:cbwe 外接 适配 binding 纹理 OHOS textureId com Flutter

Flutter OHOS 外接纹理适配简介-图片显示

Flutter 在 OHOS 平台使用外接纹理,图片场景,以 PixelMap 的形式注册到 flutter engine,与视频播放和相机预览有所区别。

注:1. 一般而言,为了方便复用,会将 ohos 对接 flutter 外接纹理的功能代码作为一个 module 模块组件单独写一个插件注册到 Flutter engine。

外接纹理背景色为白色,暂不支持修改

图片显示
使用说明
图片外接纹理,不需要使用 surfaceId, 而是以 PixelMap 的形式注册到 flutter engine。

同样实现插件,在 onAttachedToEngine 中,从入参 FlutterPluginBinding 中获取 TextureRegistry。

export class PicturePlugin implements FlutterPlugin, MethodCallHandler {
private binding: FlutterPluginBinding | null = null;
private mMethodChannel: MethodChannel | null = null;
private textureRegistry: TextureRegistry | null = null;
private pixelMapCache: HashMap<number, image.PixelMap= new HashMap<number, image.PixelMap>();

getUniqueClassName(): string {
return TAG;
}

onAttachedToEngine(binding: FlutterPluginBinding): void {
Log.e(TAG, "PicturePlugin onAttachedToEngine");
this.binding = binding;binding.getApplicationContext().resourceManager
this.mMethodChannel = new MethodChannel(binding.getBinaryMessenger(), "PictureChannel");
this.mMethodChannel.setMethodCallHandler(this);
this.textureRegistry = binding.getTextureRegistry();

}

在 onMethodCall 中实现注册纹理的响应方法

onMethodCall(call: MethodCall, result: MethodResult): void {
let method: string = call.method;
Log.e(TAG, "Received '" + method + "' message.");
switch (method) {
case "registerTexture":
this.registerPicturePixMap(call.argument("pic")).then((textureId: number) ={
result.success(textureId);
}).catch((err: Error) ={
Log.e(TAG, "method tag1, error: " + JSON.stringify(err));
})
break;
case "unregisterTexture":
this.unregisterPicturePixelMap(call.argument("textureId"));
result.success(null);
break;
}
}

注册纹理实现方法中,把图片数据读进来,创建 ImageSource,再创建 PixelMap 对象,使用 registerPixelMap 接口注册纹理到 flutter engine,得到 textureId 返回给 dart 层。

async registerPicturePixMap(pictureName: string) {
let fileData = await this.binding!.getApplicationContext().resourceManager
.getRawFileContent(flutter_assets/${pictureName});
let buffer : ArrayBuffer = fileData?.buffer as ArrayBuffer ?? new ArrayBuffer(0);
let imageSource : image.ImageSource = image.createImageSource(buffer);
let imageInfo = await imageSource.getImageInfo();
Log.d(TAG, "ImageHeight " + imageInfo.size.height);
let pixelMap = await imageSource.createPixelMap();
Log.d(TAG, "getPixelBytesNumber " + pixelMap.getPixelBytesNumber());
cbwe.kfamaw.com,cbwe.shplcchina.com,cbwe.51yjjy.com
cbwe.testoppo.com,cbwe.huaxinlighting.com
let textureId = this.textureRegistry!.registerPixelMap(pixelMap);
Log.d(TAG, "register textureId= " + textureId);

this.pixelMapCache.set(textureId, pixelMap);
return textureId;
}

dart 层得到该值,可以在 texture Widget 中使用该外接纹理完成渲染。

Widget getTextureBody(BuildContext context, PicBean picBean) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
SizedBox(
width: 300,
height: 300,
cbwe.sdymsxfh.com,cbwe.tanjiuspace.com,cbwe.yjh9988.com
cbwe.jyh01.com,cbwe.gzysart.com
child: Texture(textureId: picBean.id),
),
Container(
height: 10,
),
],
);
}

标签:cbwe,外接,适配,binding,纹理,OHOS,textureId,com,Flutter
From: https://www.cnblogs.com/bkbk1234/p/18545252

相关文章

  • harmony_flutter_amp 导入高德地图
    接入功能目前已接入amap_flutter_location_ohos已经接入了updatePrivacyShow、updatePrivacyAgree、setApiKey、setLocationOption、startLocation、stopLocation、stopLocation、destroy方法初始化1.高德地图隐私弹窗设置AMapFlutterLocation.updatePrivacyAgree(true);......
  • HarmonyOS Next 入门实战 - 创建项目、主题适配
    ​开发一个简单的demo,其中涉及一些鸿蒙应用开发的知识点,其中涉及导航框架,常用组件,列表懒加载,动画,深色模式适配,关系型数据库等内容,在实践中学习和熟悉鸿蒙应用开发。​​​​首先下载并安装DevEcoStudio开发环境,下载完成后按照提示安装即可,过程不在多说。DevEcoStudio-Harmo......
  • Flutter【05】企业级Flutter架构实践
    企业级Flutter架构实践:多端统一的移动应用解决方案一、架构概述本文介绍一个完整的企业级Flutter应用架构设计,采用三层架构模式,实现了Android、iOS和Web多端统一开发。二、架构层次详解2.1宿主层宿主层是整个应用的容器层,负责承载Flutter模块:移动端集成Android端通......
  • 驱动钛丝(SMA)的可靠性设计(1)钛丝的选型和适配
    前言形状记忆合金(Shapememoryalloy,SMA),也叫形态记忆合金、镍钛记忆合金,它是由TI(钛)-IN(镍)材料组成,这里我们方便描述,简称钛丝或者驱动钛丝。钛丝驱动本身的寿命是相当不错的,一般最少也能用个几十万到几百万次,钛丝天然的物理特性也决定了它的稳定性和寿命必然优于传统的电机电......
  • 若依框架多源数据库达梦应用适配问题处理记录-无效的模式名
    最近项目中有用户反馈应用连接数据库执行sql报无效的模式名,而在达梦客户端可以正常查询 首先怀疑的是应用连接串配置有错误,连接串配置如下: 根据查询,SZSJTGK模式不属于YSZWDT_YWYY用户将连接串模式名去掉之后还是同样问题,模式名大小写,驱动这些方面排除之后还是同样报错。......
  • 学习笔记(三十五):[email protected] (线性容器ArrayList)
    概述:一种线性数据结构,底层基于数组实现 一、导入import{ArrayList}from'@kit.ArkTS'; 二、定义letarrayList:ArrayList<string|number>=newArrayList(); 三、常用函数1、add,在ArrayList尾部插入元素 2、insert,在长度范围内任意位置插入指定元素......
  • 学习笔记(三十六):[email protected] (非线性容器HashMap)
    概述:HashMap底层使用数组+链表+红黑树的方式实现,查询、插入和删除的效率都很高。HashMap存储内容基于key-value的键值对映射,不能有重复的key,且一个key只能对应一个value一、导入import{HashMap}from'@kit.ArkTS' 二、定义lethashMap:HashMap<string,number>=ne......
  • postcss-px-to-viewport 移动端适配
    以前做移动端项目的时候都是用rem来做适配,现在基本上都是通过viewport单位来做。postcss-px-to-viewport就是一个将px单位转换为视口单位的(vw,vh,vmin,vmax)的PostCSS插件,它可以将你CSS中的px单位转化为vw,1vw等于1/100视口宽度。1.安装 javascript代码解读复制......
  • CLIPFit:不绕弯子,直接微调比提示微调和适配器微调更好 | EMNLP'24
    来源:晓飞的算法工程笔记公众号,转载请注明出处论文:Vision-LanguageModelFine-TuningviaSimpleParameter-EfficientModification论文地址:https://arxiv.org/abs/2409.16718论文代码:https://github.com/minglllli/CLIPFit创新点提出了一种CLIPFit方法以高效地微......
  • 学习笔记(三十二):[email protected] (布局回调)
    概述:提供注册组件布局和绘制完成回调通知的能力。一、导入模块import{inspector}from'@kit.ArkUI' 二、绑定指定组件,返回对应的监听句柄inspector.createComponentObservercreateComponentObserver(id:string):ComponentObserver 三、注册\取消注册回调参......