OpenHarmony开发者论坛
标题:
NativePixelMap 和 OH_PixelmapNative 有什么关系,能否相互转换?
[打印本页]
作者:
Mamba24Forever
时间:
2024-9-13 15:44
标题:
NativePixelMap 和 OH_PixelmapNative 有什么关系,能否相互转换?
[md]NativePixelMap 和 OH_PixelmapNative 有什么关系,能否相互转换?
[/md]
作者:
鸿蒙小语哥
时间:
2024-9-18 11:56
NativePixelMap 是使用依赖js环境的接口 创建的
OH_PixelmapNative 是使用不依赖js 创建的
现在有两套代码 针对不同场景,两套不能互转。
可以看如下目录
https://gitee.com/openharmony/do ... ion-dev/media/image
作者:
鸿蒙小语哥
时间:
2024-9-18 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