diff --git a/src/ZeDMD.cpp b/src/ZeDMD.cpp index 569bcb0..a17e7ba 100644 --- a/src/ZeDMD.cpp +++ b/src/ZeDMD.cpp @@ -201,7 +201,12 @@ bool ZeDMD::Open(int width, int height) void ZeDMD::SetPalette(uint8_t *pPalette) { - memcpy(&m_palette, pPalette, (sizeof(pPalette) < ZEDMD_MAX_PALETTE) ? sizeof(pPalette) : ZEDMD_MAX_PALETTE); + SetPalette(pPalette, 64); +} + +void ZeDMD::SetPalette(uint8_t* pPalette, int numColors) +{ + memcpy(&m_palette, pPalette, numColors * 3); } void ZeDMD::SetDefaultPalette(int bitDepth) diff --git a/src/ZeDMD.h b/src/ZeDMD.h index 8cd6e96..0f6fc9a 100644 --- a/src/ZeDMD.h +++ b/src/ZeDMD.h @@ -12,7 +12,7 @@ #define ZEDMD_MAX_WIDTH 256 #define ZEDMD_MAX_HEIGHT 64 -#define ZEDMD_MAX_PALETTE 64 * 3 +#define ZEDMD_MAX_PALETTE 192 #if defined(_WIN32) || defined(_WIN64) #define ZEDMDAPI __declspec(dllexport) @@ -55,6 +55,7 @@ class ZEDMDAPI ZeDMD void SetFrameSize(uint8_t width, uint8_t height); void SetPalette(uint8_t *pPalette); + void SetPalette(uint8_t* pPalette, int numColors); void SetDefaultPalette(int bitDepth); uint8_t *GetDefaultPalette(int bitDepth); void LedTest(); @@ -123,7 +124,7 @@ extern ZEDMDAPI bool ZeDMD_OpenWiFi(ZeDMD* pZeDMD, const char *ip, int port) { r extern ZEDMDAPI void ZeDMD_Close(ZeDMD* pZeDMD) { return pZeDMD->Close(); }; extern ZEDMDAPI void ZeDMD_SetFrameSize(ZeDMD* pZeDMD, uint8_t width, uint8_t height) { return pZeDMD->SetFrameSize(width, height); }; -extern ZEDMDAPI void ZeDMD_SetPalette(ZeDMD* pZeDMD, uint8_t *pPalette) { return pZeDMD->SetPalette(pPalette); }; +extern ZEDMDAPI void ZeDMD_SetPalette(ZeDMD* pZeDMD, uint8_t *pPalette, int numColors) { return pZeDMD->SetPalette(pPalette, numColors); }; extern ZEDMDAPI void ZeDMD_SetDefaultPalette(ZeDMD* pZeDMD, int bitDepth) { return pZeDMD->SetDefaultPalette(bitDepth); }; extern ZEDMDAPI uint8_t *ZeDMD_GetDefaultPalette(ZeDMD* pZeDMD, int bitDepth) { return pZeDMD->GetDefaultPalette(bitDepth); }; extern ZEDMDAPI void ZeDMD_LedTest(ZeDMD* pZeDMD) { return pZeDMD->LedTest(); };