HarmonyOS鸿蒙Next Native中,图片流char数组如何转换成字节数组传给调用的ts层

HarmonyOS鸿蒙Next Native中,图片流char数组如何转换成字节数组传给调用的ts层

请教一下,这边需要调用native 一个获取图片的C++接口,我这边传入接口的字符数组,如何转化成字节数组传给上层ts层(接口还需要带文件名,已经接口调用结果,原先本意是封一个napi_value对象,可以把接口调用结果int值,文件名char数组一起传进去),上层鸿蒙这块该如何加载bitmap类似的到Image上呢,

4 回复

有个image kit可以将char转Pixelmap,Image组件直接显示Pixelmap

更多关于HarmonyOS鸿蒙Next Native中,图片流char数组如何转换成字节数组传给调用的ts层的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


感谢回复,我这边已经解决了,在napi层就做了char->arrayBuffer的转换传到ts层了,后续转piexlmap加载到图片控件上,

在HarmonyOS鸿蒙Next Native中,将图片流的char数组转换成字节数组并传给TypeScript层,可以通过以下步骤实现:

  1. 获取图片流数据:假设你已经有一个char数组char* imageData,它存储了图片的二进制数据。

  2. 创建字节数组:在Native层,使用napi_create_arraybuffernapi_create_external_arraybuffer函数创建一个字节数组。napi_create_arraybuffer适用于数据在Native层管理,而napi_create_external_arraybuffer适用于数据由外部管理。

  3. char数组数据复制到字节数组:如果使用napi_create_arraybuffer,你需要手动将char数组的数据复制到新创建的ArrayBuffer中。如果使用napi_create_external_arraybuffer,你可以直接传递char数组的指针,无需复制。

  4. 返回字节数组给TypeScript层:通过napi_create_typedarraynapi_create_objectArrayBuffer包装为TypeScript可用的Uint8ArrayBuffer对象,并返回给调用方。

示例代码片段:

#include <napi.h>

Napi::Value ConvertToByteArray(const Napi::CallbackInfo& info) {
    Napi::Env env = info.Env();

    // 假设imageData是char数组,imageSize是其大小
    char* imageData = ...;
    size_t imageSize = ...;

    // 创建ArrayBuffer
    void* bufferData = malloc(imageSize);
    memcpy(bufferData, imageData, imageSize);
    Napi::ArrayBuffer arrayBuffer = Napi::ArrayBuffer::New(env, bufferData, imageSize);

    // 返回Uint8Array
    return Napi::Uint8Array::New(env, imageSize, arrayBuffer, 0);
}
``

在TypeScript层调用该Native方法即可获取字节数组。

在HarmonyOS鸿蒙Next Native中,将图片流的char数组转换为字节数组并传递给TS层,可以通过以下步骤实现:

  1. Native层处理:在C++代码中,将char数组转换为std::vector<uint8_t>,然后通过napi_create_arraybuffer创建ArrayBuffer对象。

  2. TS层接收:在TS层,通过napi_get_value_arraybuffer获取ArrayBuffer,并将其转换为Uint8Array

示例代码:

napi_value ConvertToByteArray(napi_env env, const char* data, size_t length) {
    napi_value arrayBuffer;
    napi_create_arraybuffer(env, length, (void**)&data, &arrayBuffer);
    return arrayBuffer;
}

在TS层:

const byteArray = new Uint8Array(arrayBuffer);

这样即可将图片流的char数组传递给TS层。

回到顶部