fixed 3color drawing of ellipses

This commit is contained in:
Laurence Bank
2024-10-28 16:22:41 +00:00
parent d5a1be5aa2
commit 63b82abb53
2 changed files with 26 additions and 13 deletions
+6 -3
View File
@@ -12,14 +12,17 @@ BBEPAPER bbep(EPD154R_152x152); // 1.54" 152x152 B/W/R
void setup()
{
bbep.initIO(DC_PIN, RESET_PIN, BUSY_PIN, CS_PIN);
// bbep.allocBuffer(); // use a back buffer
bbep.allocBuffer(); // use a back buffer
bbep.fillScreen(BBEP_WHITE);
bbep.setTextColor(BBEP_RED);
bbep.setFont(FONT_8x8);
bbep.setFont(FONT_12x16);
bbep.println("bb_epaper v1");
bbep.setTextColor(BBEP_BLACK);
bbep.println("B/W/R Test");
// bbep.writePlane();
for (int i=1; i<44; i++) {
bbep.drawCircle(bbep.width()/2, bbep.height()/2, i, (i < 22) ? BBEP_BLACK : BBEP_RED);
}
bbep.writePlane();
bbep.refresh(REFRESH_FULL);
bbep.wait();
bbep.sleep(DEEP_SLEEP);
+20 -10
View File
@@ -1303,7 +1303,7 @@ void bbepDrawLine(BBEPDISP *pBBEP, int x1, int y1, int x2, int y2, uint8_t ucCol
for(; y1 <= y2; y1++) {
mask = 0x80 >> (x1 & 7); // current bit offset
if (pBBEP->ucScreen) {
p = &pBBEP->ucScreen[iRedOffset + (x1>>3) + (y1 * iPitch)]; // point if (ucColor == BBEP_BLACK)
p = &pBBEP->ucScreen[iRedOffset + (x1>>3) + (y1 * iPitch)]; // point
bOld = bNew = p[0]; // current pixels
} else {
bOld = bNew = ucFill;
@@ -1345,10 +1345,6 @@ static void DrawScaledPixel(BBEPDISP *pBBEP, int iCX, int iCY, int x, int y, int
int iRedOffset = 0;
iPitch = (pBBEP->width + 7) >> 3;
if (ucColor >= BBEP_YELLOW && pBBEP->iFlags & (BBEP_3COLOR | BBEP_4COLOR)) {
// use the second half of the image buffer
iRedOffset = iPitch * pBBEP->height;
}
if (iXFrac != 0x10000) x = ((x * iXFrac) >> 16);
if (iYFrac != 0x10000) y = ((y * iYFrac) >> 16);
x += iCX; y += iCY;
@@ -1356,12 +1352,26 @@ static void DrawScaledPixel(BBEPDISP *pBBEP, int iCX, int iCY, int x, int y, int
pBBEP->last_error = BBEP_ERROR_BAD_PARAMETER;
return; // off the screen
}
d = &pBBEP->ucScreen[iRedOffset + (x>>3) + (y * iPitch)];
ucMask = 0x80 >> (x & 7);
if (ucColor)
*d |= ucMask;
else
*d &= ~ucMask;
d = &pBBEP->ucScreen[(x>>3) + (y * iPitch)];
if (pBBEP->iFlags & (BBEP_3COLOR | BBEP_4COLOR)) {
// use the second half of the image buffer
iRedOffset = iPitch * pBBEP->height;
if (ucColor == BBEP_RED) {
d[iRedOffset] |= ucMask; // red has priority
} else {
d[iRedOffset] &= ~ucMask; // must remove red first
if (ucColor == BBEP_WHITE)
*d |= ucMask;
else
*d &= ~ucMask;
}
} else {
if (ucColor == BBEP_WHITE)
*d |= ucMask;
else
*d &= ~ucMask;
}
} /* DrawScaledPixel() */
//
// For drawing filled ellipses