47 lines
1.4 KiB
C
47 lines
1.4 KiB
C
|
|
#pragma once
|
|||
|
|
|
|||
|
|
#include <easy2d/core/types.h>
|
|||
|
|
#include <easy2d/core/math_types.h>
|
|||
|
|
#include <vector>
|
|||
|
|
|
|||
|
|
namespace easy2d {
|
|||
|
|
|
|||
|
|
// ============================================================================
|
|||
|
|
// Alpha 遮罩 - 存储图片的非透明区域信息
|
|||
|
|
// ============================================================================
|
|||
|
|
class AlphaMask {
|
|||
|
|
public:
|
|||
|
|
AlphaMask() = default;
|
|||
|
|
AlphaMask(int width, int height);
|
|||
|
|
|
|||
|
|
/// 从像素数据创建遮罩
|
|||
|
|
static AlphaMask createFromPixels(const uint8_t* pixels, int width, int height, int channels);
|
|||
|
|
|
|||
|
|
/// 获取指定位置的透明度(0-255)
|
|||
|
|
uint8_t getAlpha(int x, int y) const;
|
|||
|
|
|
|||
|
|
/// 检查指定位置是否不透明
|
|||
|
|
bool isOpaque(int x, int y, uint8_t threshold = 128) const;
|
|||
|
|
|
|||
|
|
/// 检查指定位置是否在遮罩范围内
|
|||
|
|
bool isValid(int x, int y) const;
|
|||
|
|
|
|||
|
|
/// 获取遮罩尺寸
|
|||
|
|
int getWidth() const { return width_; }
|
|||
|
|
int getHeight() const { return height_; }
|
|||
|
|
Size getSize() const { return Size(static_cast<float>(width_), static_cast<float>(height_)); }
|
|||
|
|
|
|||
|
|
/// 获取原始数据
|
|||
|
|
const std::vector<uint8_t>& getData() const { return data_; }
|
|||
|
|
|
|||
|
|
/// 检查遮罩是否有效
|
|||
|
|
bool isValid() const { return !data_.empty() && width_ > 0 && height_ > 0; }
|
|||
|
|
|
|||
|
|
private:
|
|||
|
|
int width_ = 0;
|
|||
|
|
int height_ = 0;
|
|||
|
|
std::vector<uint8_t> data_; // Alpha值数组
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
} // namespace easy2d
|