OpenHarmony开发者论坛

标题: NativePixelMap 和 OH_PixelmapNative 有什么关系,能否相互转换? [打印本页]

作者: Mamba24Forever    时间: 7 天前
标题: NativePixelMap 和 OH_PixelmapNative 有什么关系,能否相互转换?
[md]NativePixelMap 和 OH_PixelmapNative 有什么关系,能否相互转换?
[/md]
作者: 鸿蒙小语哥    时间: 前天 11:56
NativePixelMap 是使用依赖js环境的接口 创建的
OH_PixelmapNative 是使用不依赖js 创建的

现在有两套代码 针对不同场景,两套不能互转。

可以看如下目录
https://gitee.com/openharmony/do ... ion-dev/media/image
作者: 鸿蒙小语哥    时间: 前天 12:16
回复 鸿蒙小语哥:
会飞的企鹅12138
实现方式:
OH_ImageSourceNative_CreatePixelmap 通过图片解码参数创建OH_PixelmapNative对象 参考 介绍Image_NativeModule结构体信息 (openharmony.cn)

typedef struct OH_PixelmapNative * OH_PixelmapNativeHandle 参考 ArkUI_NativeModule (openharmony.cn)

ArkUI_DrawableDescriptor * OH_ArkUI_DrawableDescriptor_CreateFromPixelMap (OH_PixelmapNativeHandle pixelMap) 参考 ArkUI_NativeModule (openharmony.cn)

对于NativePixelMap | 定义native层PixelMap数据类型名称

区别:
struct NativePixelMap_ {
OHOS::Media:ixelMapNapi* napi = nullptr;
};
class PixelMapNapi {
public:
PixelMapNapi();
~PixelMapNapi();

static napi_value Init(napi_env env, napi_value exports);

static napi_value CreatePixelMap(napi_env env, std::shared_ptr<ixelMap> pixelmap);
static std::shared_ptr<ixelMap> GetPixelMap(napi_env env, napi_value pixelmap);
std::shared_ptr<ixelMap>* GetPixelMap();
std::shared_ptr<ixelMap> GetPixelNapiInner()
{
return nativePixelMap_;
}
void setPixelNapiEditable(bool isEditable)
{
isPixelNapiEditable = isEditable;
}
bool GetPixelNapiEditable()
{
return isPixelNapiEditable;
}
uint32_t GetUniqueId()
{
return uniqueId_;
}
bool IsLockPixelMap();
bool LockPixelMap();
void UnlockPixelMap();
static napi_ref GetConstructor()
{
return sConstructor_;
}
private:
static napi_value Constructor(napi_env env, napi_callback_info info);
static void Destructor(napi_env env, void *nativeObject, void *finalize);

// readonly property
static napi_value GetIsEditable(napi_env env, napi_callback_info info);
static napi_value GetIsStrideAlignment(napi_env env, napi_callback_info info);

// static mothod
static napi_value CreatePixelMap(napi_env env, napi_callback_info info);
static void CreatePixelMapComplete(napi_env env, napi_status status, void *data);
static napi_value Unmarshalling(napi_env env, napi_callback_info info);
static void UnmarshallingComplete(napi_env env, napi_status status, void *data);
static napi_value CreatePixelMapFromParcel(napi_env env, napi_callback_info info);
static napi_value CreatePixelMapFromSurface(napi_env env, napi_callback_info info);
static void CreatePixelMapFromSurfaceComplete(napi_env env, napi_status status, void *data);
static napi_value ThrowExceptionError(napi_env env,
const std::string &tag, const std::uint32_t &code, const std::string &info);

// methods
static napi_value ReadPixelsToBuffer(napi_env env, napi_callback_info info);
static napi_value ReadPixels(napi_env env, napi_callback_info info);
static napi_value WritePixels(napi_env env, napi_callback_info info);
static napi_value WriteBufferToPixels(napi_env env, napi_callback_info info);
static napi_value GetImageInfo(napi_env env, napi_callback_info info);
static napi_value GetBytesNumberPerRow(napi_env env, napi_callback_info info);
static napi_value GetPixelBytesNumber(napi_env env, napi_callback_info info);
static napi_value getPixelBytesCount(napi_env env, napi_callback_info info);
static napi_value IsSupportAlpha(napi_env env, napi_callback_info info);
static napi_value SetAlphaAble(napi_env env, napi_callback_info info);
static napi_value CreateAlphaPixelmap(napi_env env, napi_callback_info info);
static napi_value GetDensity(napi_env env, napi_callback_info info);
static napi_value SetDensity(napi_env env, napi_callback_info info);
static napi_value Release(napi_env env, napi_callback_info info);
static napi_value SetAlpha(napi_env env, napi_callback_info info);

static napi_value Scale(napi_env env, napi_callback_info info);
static napi_value Translate(napi_env env, napi_callback_info info);
static napi_value Rotate(napi_env env, napi_callback_info info);
static napi_value Flip(napi_env env, napi_callback_info info);
static napi_value Crop(napi_env env, napi_callback_info info);

static napi_value GetColorSpace(napi_env env, napi_callback_info info);
static napi_value SetColorSpace(napi_env env, napi_callback_info info);
static napi_value Marshalling(napi_env env, napi_callback_info info);
static napi_value ApplyColorSpace(napi_env env, napi_callback_info info);

void release();
static thread_local napi_ref sConstructor_;
napi_env env_ = nullptr;
std::shared_ptr<ixelMap> nativePixelMap_;
int32_t lockCount = 0;
bool isRelease = false;
bool isPixelNapiEditable = true;
uint32_t uniqueId_ = 0;
};
对于OH_PixelmapNative | Pixelmap结构体类型,用于执行Pixelmap相关操作

struct OH_PixelmapNative {
public:
OH_PixelmapNative(std::shared_ptr<OHOS::Media:ixelMap> pixelMap);
OH_PixelmapNative(const uint32_t *colors, uint32_t colorLength, const OHOS::Media::InitializationOptions &opts);
OH_PixelmapNative(const OHOS::Media::InitializationOptions &opts);
OH_PixelmapNative(OH_PixelmapNative *OH_PixelmapNative, const OHOS::Media::InitializationOptions &opts);
~OH_PixelmapNative();

std::shared_ptr<OHOS::Media:ixelMap> GetInnerPixelmap();

private:
std::shared_ptr<OHOS::Media:ixelMap> pixelmap_;
};

#ifdef __cplusplus
};
#endif
/** @} */
#endif // FRAMEWORKS_KITS_JS_COMMON_INCLUDE_PIXELMAP_NATIVE_IMPL_H
NativePixelMap:

是一个C++结构体,它包含一个指向PixelMapNapi​的指针。
​PixelMapNapi​是一个类,封装了与PixelMap相关的NAPI(Native API)操作。
OH_PixelmapNative:

也是一个C++结构体,它封装了一个指向OHOS::Media:ixelMap​的shared_ptr​。
提供了多种构造函数,可以直接从PixelMap​的shared_ptr​、颜色数组、初始化选项等创建。
提供了一个方法GetInnerPixelmap()​来获取内部的PixelMap​对象。




欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/) Powered by Discuz! X3.5