//
//  RYBitmapHelper.h
//  SDK
//
//  Created by ldc on 2024/5/23.
//

#import <Foundation/Foundation.h>
#import <CoreGraphics/CoreGraphics.h>
#if TARGET_OS_OSX
#import <AppKit/AppKit.h>
#import <CoreImage/CoreImage.h>
#else
#import <UIKit/UIKit.h>
#endif

NS_ASSUME_NONNULL_BEGIN

#if TARGET_OS_OSX
#else
/*!
 *  \~chinese
 *
 *  位图生成模式
 *
 *  \~english
 *
 *  The mode to generate bitmap.
 *
 */
typedef NS_ENUM(NSUInteger, HBitmapMode) {
    HBitmapModeBlackAndWhite = 0,///< \~chinese 二值 \~english black and white
    HBitmapModeErrorDiffusion,///< \~chinese 错误扩散 \~english error diffusion
};
#endif

/// 位图处理工具
@interface RYBitmapHelper : NSObject

#if TARGET_OS_OSX


/// BMP图片转NSImage对象，兼容没对齐的数据
/// - Parameter path: 路径
+ (NSImage *)bmpDecode:(NSString *)path;

+ (NSImage *)imageFromGrayBuffer:(NSData *)data height:(NSInteger)height;

/// 使用二值位图数据生成图片
/// - Parameters:
///   - data: 二值数据
///   - height: 二值位图高度
+ (NSImage *)imageFromMonoBuffer:(NSData *)data height:(NSInteger)height;

/// 获取灰色图片
/// - Parameter image: 源图片
+ (NSImage *)getGrayImage:(NSImage *)image;

/// 使用自动计算的阈值生成二值位图数据
/// - Parameters:
///   - image: 图片
+ (NSData *)thresholdMonoData:(NSImage *)image;

/// 使用阈值生成二值位图数据
/// - Parameters:
///   - image: 图片
///   - threshold: 阈值
+ (NSData *)thresholdMonoData:(NSImage *)image threshold:(Byte)threshold;

/// 使用Floyd–Steinberg抖动算法生成二值位图数据
/// - Parameter image: 图片
+ (NSData *)floydSteinbergDitheringMonoData:(NSImage *)image;

+ (NSData *)bayerDisperse:(NSImage *)image;

#else


/// 水平镜像
/// - Parameter image: 目标图片
+ (UIImage *)horizonalMirrir:(UIImage *)image;


/// 图片旋转
/// @param image 目标图片
+ (UIImage *)rotate180:(UIImage *)image;

/*!
 *  \~chinese
 *
 *  @param image 图片
 *  @param mode HBitmapMode
 *
 *  \~english
 *
 *  @param image image
 *  @param mode HBitmapMode
 *
 */
+ (NSData *)printableData:(UIImage *)image mode:(HBitmapMode)mode;

#endif

@end

NS_ASSUME_NONNULL_END
