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

C 語言 VGA 256 色繪圖庫:從像素操作到幾何圖元的完整實作

     編輯:關於C語言

本源碼實現了一個面向 VGA 0x101 模式(640×480×256 色)的輕量級繪圖函數庫,核心採用銀行切換機制突破 64KB 顯存寻址限制,適合 DOS 時代圖形程序教學與嵌入式移植參考。

核心架構

  • 顯存模型:A000:0000 線性映射,分頁大小 64KB(0x10000 字節)
  • 銀行切換:selectpage() 封裝 INT 10H AH=4F05h 功能,自動處理跨頁訪問
  • 座標運算:y * MAXX + x 計算線性偏移,高 16 位為頁號,低 16 位為頁內偏移

函數清單與算法亮點

環境控制

  • init256():INT 10H AX=4F02h/BX=101h 設置 VESA 模式
  • exit256():INT 10H AX=0003h 恢復文本模式

像素級操作

  • putpixel(x,y,color) / getpixel(x,y):含自動換頁邏輯的基礎讀寫

幾何圖元

  • 直線:line() 實現 Bresenham 算法變體,整數運算、無除法、八方向通用
  • 矩形:box() 繪製邊框,fillbox() 逐行填充
  • 圓:circle() 採用中點圓算法(Midpoint Circle Algorithm),決策參數 delta = 3 - 2r,配合 plot_circle() 八分對稱繪製,支援長寬比校正(asp_ratio)

示例程序

main() 演示:初始化 → 繪製方框、圓形、填充矩形 → 等待按鍵 → 恢復文本模式。

移植與擴展建議

  • 將銀行切換抽象為介面,可移植至 VESA 2.0+ 線性框架緩衝區(LFB)模式
  • 增加雙緩衝、剪裁、多邊形填充、位圖繪製等進階功能
  • 針對現代系統,可改用 SDL/Allegro 等跨平台庫替換底層硬件訪問
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved