/
vTech
/
FcApps
Обзор
Документация
Войти
/
vTech
/
FcApps
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
FcLibs/FcImage/src/FcImage.h
82 строки
3 KB
vTech
alpha_00
03 дек 2025, 17:45
03 дек 2025, 17:45
ab8382d
Код
Авторство
О чём код?
#ifndef __FCIMAGE_H__ #define __FCIMAGE_H__ #include <malloc.h> #include <stdint.h> #include <string.h> #define FCIMAGEDEF static inline typedef struct _FcImage_RGBA_t { size_t mWidth; size_t mHeight; uint8_t mData[1][4]; } FcImage_RGBA_t; FCIMAGEDEF FcImage_RGBA_t* FcImage_RGBA(size_t width, size_t height); FCIMAGEDEF void FcImage_RGBA_setZero(FcImage_RGBA_t* mImage); FCIMAGEDEF void FcImage_RGBA_setColor(FcImage_RGBA_t* mImage, uint8_t R, uint8_t G, uint8_t B, uint8_t A); FCIMAGEDEF uint8_t(*FcImage_RGBA_getData(FcImage_RGBA_t* pImage))[4] {return pImage ? pImage->mData : NULL;} FCIMAGEDEF size_t FcImage_RGBA_getWidth(FcImage_RGBA_t* mImage) { return mImage ? mImage->mWidth : 0; } FCIMAGEDEF size_t FcImage_RGBA_getHeight(FcImage_RGBA_t* mImage) { return mImage ? mImage->mHeight : 0; } FCIMAGEDEF void FcImage_RGBA_copy(FcImage_RGBA_t* mImage, size_t width, size_t height, uint8_t (*pData)[4]); FCIMAGEDEF void FcImage_RGBA_free(FcImage_RGBA_t* mImage); FCIMAGEDEF FcImage_RGBA_t* FcImage_RGBA(size_t width, size_t height) { FcImage_RGBA_t *mImage = (FcImage_RGBA_t *)calloc(1, width * height * 4 * sizeof(uint8_t) + sizeof(FcImage_RGBA_t)); //printf("%x\n", mImage->mData); if (!mImage) goto gError; mImage->mWidth = width; mImage->mHeight = height; gError: return mImage; } FCIMAGEDEF void FcImage_RGBA_setZero(FcImage_RGBA_t* mImage) { size_t i, j, mLength; if (!mImage) goto gError; mLength = mImage->mHeight * mImage->mWidth; for (i = 0; i < mLength; i++) for (j = 0; j < 4; j++) mImage->mData[i][j] = 0; gError: return; } FCIMAGEDEF void FcImage_RGBA_setColor(FcImage_RGBA_t* mImage, uint8_t R, uint8_t G, uint8_t B, uint8_t A) { size_t i, j, mLength; if (!mImage) goto gError; mLength = mImage->mHeight * mImage->mWidth; for (i = 0; i < mLength; i++) mImage->mData[i][0] = R, mImage->mData[i][1] = G, mImage->mData[i][2] = B, mImage->mData[i][3] = A; gError: return; } FCIMAGEDEF void FcImage_RGBA_copy(FcImage_RGBA_t* mImage, size_t width, size_t height, uint8_t (*pData)[4]){ size_t x, y, i, mWidth, mHeight; if (!mImage || !pData) goto gError; mHeight = height > mImage->mHeight ? mImage->mHeight : height; mWidth = width > mImage->mWidth ? mImage->mWidth : width; for (y = 0; y < mHeight; y++) for (x = 0; x < mWidth; x++) for (i = 0; i < 4; i++) mImage->mData[y * mImage->mWidth + x][i] = pData[y * width + x][i]; return; gError: return; } FCIMAGEDEF void FcImage_RGBA_free(FcImage_RGBA_t* pImage) { if (pImage) free(pImage); } #undef FCIMAGEDEF #endif //__FCIMAGE_H__