libc: BGI Фаза 2d-1 — getimage/putimage/imagesize (спрайты)
Растровые образы: imagesize (4 байта заголовка w,h + w*h пикселей), getimage (захват прямоугольника), putimage с COPY/XOR/OR/AND/NOT_PUT. Блит идёт raw в одной W3-скобке — добавлен _gfx_getpixel256_raw в gfx + leaf _bgi_read_raw в drv256. Проверено в MAME (tests/bgitest): захват спрайта, 3 COPY-копии, XOR/OR/COPY поверх фона. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+29
-21
@@ -1,10 +1,12 @@
|
||||
/*
|
||||
* bgitest — демонстрация BGI-слоя graphics.h (режим 320×256×256).
|
||||
* Фаза 2c: floodfill + pieslice/sector.
|
||||
* Фаза 2d-1: getimage/putimage/imagesize (спрайты, COPY/XOR/OR).
|
||||
*/
|
||||
|
||||
#include <graphics.h>
|
||||
|
||||
static unsigned char buf[2048];
|
||||
|
||||
int main(void)
|
||||
{
|
||||
int mx, my;
|
||||
@@ -17,31 +19,37 @@ int main(void)
|
||||
setcolor(WHITE);
|
||||
rectangle(0, 0, mx, my);
|
||||
setcolor(YELLOW);
|
||||
outtextxy(96, 6, "BGI flood + pie");
|
||||
outtextxy(88, 6, "BGI image / sprite");
|
||||
|
||||
/* Окружность-контур, затем floodfill её нутра. */
|
||||
setcolor(YELLOW);
|
||||
circle(66, 90, 46);
|
||||
setfillstyle(SOLID_FILL, LIGHTRED);
|
||||
floodfill(66, 90, YELLOW);
|
||||
setcolor(WHITE);
|
||||
outtextxy(38, 142, "floodfill");
|
||||
|
||||
/* Круговая диаграмма из трёх pieslice. */
|
||||
setfillstyle(SOLID_FILL, LIGHTGREEN);
|
||||
pieslice(210, 86, 0, 90, 52);
|
||||
/* Исходный спрайт 40×30 в левом верхнем углу. */
|
||||
setfillstyle(SOLID_FILL, LIGHTBLUE);
|
||||
pieslice(210, 86, 90, 200, 52);
|
||||
setfillstyle(SOLID_FILL, LIGHTMAGENTA);
|
||||
pieslice(210, 86, 200, 360, 52);
|
||||
bar(12, 28, 51, 57);
|
||||
setcolor(YELLOW);
|
||||
rectangle(12, 28, 51, 57);
|
||||
setcolor(LIGHTRED);
|
||||
line(12, 28, 51, 57);
|
||||
setfillstyle(SOLID_FILL, LIGHTGREEN);
|
||||
fillellipse(31, 42, 8, 8);
|
||||
setcolor(WHITE);
|
||||
outtextxy(184, 146, "pieslice");
|
||||
outtextxy(12, 60, "src");
|
||||
|
||||
/* Эллиптический сектор со штриховкой. */
|
||||
setfillstyle(HATCH_FILL, LIGHTCYAN);
|
||||
sector(120, 210, 20, 160, 90, 34);
|
||||
/* Захват и раскладка копий (COPY_PUT). */
|
||||
getimage(12, 28, 51, 57, buf);
|
||||
putimage(80, 28, buf, COPY_PUT);
|
||||
putimage(130, 28, buf, COPY_PUT);
|
||||
putimage(180, 28, buf, COPY_PUT);
|
||||
setcolor(WHITE);
|
||||
outtextxy(96, 236, "sector");
|
||||
outtextxy(80, 60, "copy x3");
|
||||
|
||||
/* XOR и OR поверх серого фона. */
|
||||
setfillstyle(SOLID_FILL, DARKGRAY);
|
||||
bar(20, 110, 240, 170);
|
||||
putimage(30, 122, buf, XOR_PUT);
|
||||
outtextxy(30, 176, "xor");
|
||||
putimage(110, 122, buf, OR_PUT);
|
||||
outtextxy(110, 176, "or");
|
||||
putimage(190, 122, buf, COPY_PUT);
|
||||
outtextxy(190, 176, "copy");
|
||||
|
||||
for (;;) { }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user