/*
* Copyright (c) 2020-2022 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @addtogroup UI_Common
* @{
*
* @brief Defines common UI capabilities, such as image and text processing.
*
* @since 1.0
* @version 1.0
*/
/**
* @file image.h
*
* @brief Declares basic image attributes, including the image type and path.
*
* @since 1.0
* @version 1.0
*/
#ifndef GRAPHIC_LITE_IMAGE_H
#define GRAPHIC_LITE_IMAGE_H
#include "gfx_utils/geometry2d.h"
#include "gfx_utils/graphic_buffer.h"
#include "gfx_utils/heap_base.h"
#include "gfx_utils/image_info.h"
#include "gfx_utils/style.h"
namespace OHOS {
/**
* @brief Represents basic image attributes, including the image type and path.
*
* @since 1.0
* @version 1.0
*/
class Image : public HeapBase {
public:
/**
* @brief A constructor used to create an Image instance. You can use this constructor when a component
* requires a map.
*
* @since 1.0
* @version 1.0
*/
Image();
/**
* @brief A destructor used to delete the Image instance.
*
* @since 1.0
* @version 1.0
*/
virtual ~Image();
/**
* @brief Obtains the image information in an array.
*
* @return Returns the pointer to the image information.
* @since 1.0
* @version 1.0
*/
const ImageInfo* GetImageInfo() const
{
return imageInfo_;
}
/**
* @brief Obtains the image path in binary.
*
* @return Returns the pointer to the image path.
* @since 1.0
* @version 1.0
*/
const char* GetPath() const
{
return path_;
}
/**
* @brief Obtains the basic image information, including the image format, width, and height.
*
* @param header Indicates the basic image information.
* @since 1.0
* @version 1.0
*/
void GetHeader(ImageHeader& header) const;
/**
* @brief Obtains the image type.
*
* @return Returns IMG_SRC_VARIABLE for image information in an array; returns IMG_SRC_FILE for an
* image path in binary.
* @since 1.0
* @version 1.0
*/
uint8_t GetSrcType() const
{
return srcType_;
}
/**
* @brief Sets the image path.
*
* @param src Indicates the pointer to image path in the format of ..\\xxx\\xxx\\xxx.bin.
* @return Returns true if the operation is successful; returns false if the operation fails.
* @since 1.0
* @version 1.0
*/
bool SetSrc(const char* src);
/**
* @brief Sets the image information.
*
* @param src Indicates the pointer to the image information.
* @return Returns true if the operation is successful; returns false if the operation fails.
* @since 1.0
* @version 1.0
*/
bool SetSrc(const ImageInfo* src);
/**
* @brief Parse file path
*
* @param src Indicates the pointer to the image information.
* @return Returns true if the operation is successful; returns false if the operation fails.
* @since 1.0
* @version 1.0
*/
bool PreParse(const char* src);
void DrawImage(BufferInfo& gfxDstBuffer,
const Rect& coords,
const Rect& mask,
const Style& style,
uint8_t opaScale) const;
protected:
const ImageInfo* imageInfo_;
char* path_;
private:
#if ENABLE_JPEG || ENABLE_PNG
enum ImageType {
IMG_PNG,
IMG_JPEG,
IMG_GIF,
IMG_UNKNOWN,
};
const static uint8_t IMG_BYTES_TO_CHECK = 4; // 4: check 4 bytes of image file
#endif
uint8_t srcType_;
bool mallocFlag_;
bool SetLiteSrc(const char* src);
bool SetStandardSrc(const char* src);
#if ENABLE_JPEG
bool SetJPEGSrc(const char* src);
#endif
#if ENABLE_PNG
bool SetPNGSrc(const char* src);
#endif
#if ENABLE_JPEG || ENABLE_PNG
ImageType CheckImgType(const char* src);
#endif
bool IsImgValid(const char* suffix)
{
return (!strcmp(suffix, ".png") || !strcmp(suffix, ".PNG") || !strcmp(suffix, ".jpg") ||
!strcmp(suffix, ".JPG") || !strcmp(suffix, ".jpeg") || !strcmp(suffix, ".JPEG") ||
!strcmp(suffix, ".BMP") || !strcmp(suffix, ".bmp") || !strcmp(suffix, ".GIF") || !strcmp(suffix, ".gif"));
}
void ReInitImageInfo(ImageInfo* imgInfo, bool mallocFlag);
};
} // namespace OHOS
#endif // GRAPHIC_LITE_IMAGE_H