refactor: use shared drawPixelWithRenderMode in renderFromCache

Address review comment #4:
- Replace hand-rolled pixel rendering logic in renderFromCache() with
  shared drawPixelWithRenderMode() from DitherUtils.h
- This also hoists getRenderMode() out of the per-pixel call since
  drawPixelWithRenderMode handles it internally
This commit is contained in:
Martin Brook 2026-01-30 17:48:18 +00:00
parent ea5b2c06df
commit 72c2cea089

View File

@ -6,6 +6,7 @@
#include <SDCardManager.h> #include <SDCardManager.h>
#include <Serialization.h> #include <Serialization.h>
#include "../converters/DitherUtils.h"
#include "../converters/ImageDecoderFactory.h" #include "../converters/ImageDecoderFactory.h"
// Cache file format: // Cache file format:
@ -79,20 +80,12 @@ static bool renderFromCache(GfxRenderer& renderer, const std::string& cachePath,
} }
int destY = y + row; int destY = y + row;
GfxRenderer::RenderMode renderMode = renderer.getRenderMode();
for (int col = 0; col < cachedWidth; col++) { for (int col = 0; col < cachedWidth; col++) {
int byteIdx = col / 4; int byteIdx = col / 4;
int bitShift = 6 - (col % 4) * 2; // MSB first within byte int bitShift = 6 - (col % 4) * 2; // MSB first within byte
uint8_t pixelValue = (rowBuffer[byteIdx] >> bitShift) & 0x03; uint8_t pixelValue = (rowBuffer[byteIdx] >> bitShift) & 0x03;
// Draw based on render mode (same logic as GfxRenderer::drawBitmap) drawPixelWithRenderMode(renderer, x + col, destY, pixelValue);
if (renderMode == GfxRenderer::BW && pixelValue < 3) {
renderer.drawPixel(x + col, destY, true);
} else if (renderMode == GfxRenderer::GRAYSCALE_MSB && (pixelValue == 1 || pixelValue == 2)) {
renderer.drawPixel(x + col, destY, false);
} else if (renderMode == GfxRenderer::GRAYSCALE_LSB && pixelValue == 1) {
renderer.drawPixel(x + col, destY, false);
}
} }
} }