首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言基礎

C 編程繪圖程序包源碼:VGA 256 色模式下像素、線條、矩形、圓形繪製庫

     編輯:C 語言基礎

核心常量與數據結構

#define MAXX 640
#define MAXY 480
static float asp_ratio = 1;  // 寬高比修正

視頻頁面切換

static void selectpage(int page) {
    union REGS r;
    r.x.ax = 0x4f05; r.x.bx = 0; r.x.dx = page;
    int86(0x10, &r, &r);  // VESA BIOS 切頁
}

圖形模式初始化/退出

void init256() {          // 進入 640x480x256 模式 (0x101)
    union REGS r;
    r.x.ax = 0x4f02; r.x.bx = 0x101;
    int86(0x10, &r, &r);
}
void exit256() {          // 返回文本模式 (模式 3)
    union REGS r;
    r.h.ah = 0; r.h.al = 3;
    int86(0x10, &r, &r);
}

像素操作

void putpixel(int x, int y, int color) {
    long i = y * MAXX + x;
    int tt = i >> 16; i &= 0xffff;
    static int t = 0;
    if (t != tt) selectpage(tt), t = tt;
    *(char far *)0xA0000000L[i] = (char)color;  // 直接寫顯存
}
int getpixel(int x, int y) { ... }  // 同理讀取

幾何圖元繪製

  • line:Bresenham 整數算法,處理八個象限。
  • box:繪製矩形邊框(四條邊)。
  • fillbox:雙層循環填充矩形區域。
  • circle:中點畫圓算法,配合 plot_circle 八向對稱繪點,含寬高比修正。

主程序演示

main() {
    init256();
    box(100,100,200,200,35);
    circle(300,250,200,35);
    fillbox(200,200,350,350,35);
    getch();
    exit256();
}

直接操作 VESA 線性帧緩衝區,無需 BGI 驅動,適合 DOS 實模式下高性能圖形開發。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved