mirror of
https://github.com/go-vgo/robotgo.git
synced 2025-06-01 14:43:55 +00:00
55 lines
1.8 KiB
C
55 lines
1.8 KiB
C
#pragma once
|
|
#ifndef BMP_IO_H
|
|
#define BMP_IO_H
|
|
|
|
#include "MMBitmap.h"
|
|
#include "io.h"
|
|
|
|
enum _BMPReadError {
|
|
kBMPGenericError = 0,
|
|
kBMPAccessError,
|
|
kBMPInvalidKeyError,
|
|
kBMPUnsupportedHeaderError,
|
|
kBMPInvalidColorPanesError,
|
|
kBMPUnsupportedColorDepthError,
|
|
kBMPUnsupportedCompressionError,
|
|
kBMPInvalidPixelDataError
|
|
};
|
|
|
|
typedef MMIOError MMBMPReadError;
|
|
|
|
/* Returns description of given MMBMPReadError.
|
|
* Returned string is constant and hence should not be freed. */
|
|
const char *MMBMPReadErrorString(MMIOError error);
|
|
|
|
/* Attempts to read bitmap file at path; returns new MMBitmap on success, or
|
|
* NULL on error. If |error| is non-NULL, it will be set to the error code
|
|
* on return.
|
|
*
|
|
* Currently supports:
|
|
* - Uncompressed Windows v3/v4/v5 24-bit or 32-bit BMP.
|
|
* - OS/2 v1 or v2 24-bit BMP.
|
|
* - Does NOT yet support: 1-bit, 4-bit, 8-bit, 16-bit, compressed bitmaps,
|
|
* or PNGs/JPEGs disguised as BMPs (and returns NULL if those are given).
|
|
*
|
|
* Responsibility for destroy()'ing returned MMBitmap is left up to caller. */
|
|
MMBitmapRef newMMBitmapFromBMP(const char *path, MMBMPReadError *error);
|
|
|
|
/* Returns a buffer containing the raw BMP file data in Windows v3 BMP format,
|
|
* ready to be saved to a file. If |len| is not NULL, it will be set to the
|
|
* number of bytes allocated in the returned buffer.
|
|
*
|
|
* Responsibility for free()'ing data is left up to the caller. */
|
|
uint8_t *createBitmapData(MMBitmapRef bitmap, size_t *len);
|
|
|
|
/* Saves bitmap to file in Windows v3 BMP format.
|
|
* Returns 0 on success, -1 on error. */
|
|
int saveMMBitmapAsBMP(MMBitmapRef bitmap, const char *path);
|
|
|
|
/* Swaps bitmap from Quadrant 1 to Quadran III format, or vice versa
|
|
* (upside-down Cartesian/PostScript/GL <-> right side up QD/CG raster format).
|
|
*/
|
|
void flipBitmapData(void *data, size_t width, size_t height, size_t bytewidth);
|
|
|
|
#endif /* BMP_IO_H */
|