• Lv0
    粉丝0

积分15 / 贡献0

提问1答案被采纳0文章0

作者动态

    NativePixelMap 和 OH_PixelmapNative 有什么关系,能否相互转换?

    鸿蒙小语哥

    沙发 发表于 2024-9-18 11:56:30
    NativePixelMap 是使用依赖js环境的接口 创建的
    OH_PixelmapNative 是使用不依赖js 创建的

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

    可以看如下目录
    https://gitee.com/openharmony/do ... ion-dev/media/image

    鸿蒙小语哥

    发表于 2024-9-18 12:16  IP属地: 江苏省盐城市

    回复 鸿蒙小语哥:
    会飞的企鹅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​对象。

    【1 条回复】

    Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

    返回顶部