Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 19 additions & 7 deletions wled00/image_loader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,13 +52,25 @@ void screenClearCallback(void) {
void updateScreenCallback(void) {}

void drawPixelCallback(int16_t x, int16_t y, uint8_t red, uint8_t green, uint8_t blue) {
// simple nearest-neighbor scaling
int16_t outY = y * activeSeg->height() / gifHeight;
int16_t outX = x * activeSeg->width() / gifWidth;
// set multiple pixels if upscaling
for (int16_t i = 0; i < (activeSeg->width()+(gifWidth-1)) / gifWidth; i++) {
for (int16_t j = 0; j < (activeSeg->height()+(gifHeight-1)) / gifHeight; j++) {
activeSeg->setPixelColorXY(outX + i, outY + j, red, green, blue);
if (activeSeg->height() == 1) {
Comment thread
softhack007 marked this conversation as resolved.
Outdated
// 1D strip: load pixel-by-pixel left to right, top to bottom (0/0 = top-left in gifs), scale if needed
int totalImgPix = (int)gifWidth * gifHeight;
int stripLen = activeSeg->width();
Comment thread
DedeHai marked this conversation as resolved.
Outdated
if (totalImgPix - stripLen == 1) totalImgPix--; // handle off-by-one: skip last pixel instead of first
Comment thread
softhack007 marked this conversation as resolved.
Outdated
int start = ((int)y * gifWidth + (int)x) * stripLen / totalImgPix; // simple nearest-neighbor scaling
int end = (((int)y * gifWidth + (int)x+1) * stripLen + totalImgPix-1) / totalImgPix;
for (int i = start; i < end; i++) {
activeSeg->setPixelColor(i, red, green, blue);
}
} else {
// simple nearest-neighbor scaling
int outY = (int)y * activeSeg->height() / gifHeight;
int outX = (int)x * activeSeg->width() / gifWidth;
// set multiple pixels if upscaling
for (int i = 0; i < (activeSeg->width()+(gifWidth-1)) / gifWidth; i++) {
for (int j = 0; j < (activeSeg->height()+(gifHeight-1)) / gifHeight; j++) {
activeSeg->setPixelColorXY(outX + i, outY + j, red, green, blue);
}
}
}
Comment thread
softhack007 marked this conversation as resolved.
Comment thread
DedeHai marked this conversation as resolved.
}
Expand Down