這是一個(gè)用C語言輸出的藝術(shù)字“HelloWorld!”。
還記得你第一次用C語言輸出“HelloWorld!”嗎?很簡(jiǎn)單吧!
編譯環(huán)境:VC6
第三方庫:Easyx2022 注意需要提前安裝easyX,如沒有基礎(chǔ)可以先了解easyX圖形編程
1.引入圖形庫頭文件
#include <graphics.h>
2.定義全局變量
POINT *g_pDst; POINT *g_pSrc; int g_nWidth; int g_nHeight; int g_nCount;
3.主函數(shù)
void main() { initgraph(640, 480); DWORD* pBuf = GetImageBuffer(); GetDstPoints(); GetSrcPoints(); int x, y; for (int i = 2; i <= 256; i += 2) { COLORREF c = RGB(i - 1, i - 1, i - 1); Blur(pBuf); for (int d = 0; d < g_nCount; d++) { x = g_pSrc[d].x + (g_pDst[d].x - g_pSrc[d].x) * i / 256; y = g_pSrc[d].y + (g_pDst[d].y - g_pSrc[d].y) * i / 256; pBuf[y * 640 + x] = c; } Sleep(5); }
#include <graphics.h> #include <conio.h> #include <time.h> // 定義全局變量 POINT *g_pDst;// 點(diǎn)集(目標(biāo)) POINT *g_pSrc;// 點(diǎn)集(源) int g_nWidth;// 文字的寬度 int g_nHeight;// 文字的高度 int g_nCount;// 點(diǎn)集包含的點(diǎn)的數(shù)量 // 獲取目標(biāo)點(diǎn)集 void GetDstPoints() { // 設(shè)置臨時(shí)繪圖對(duì)象 IMAGE img; SetWorkingImage(&img); // 定義目標(biāo)字符串 TCHAR s[] = _T("Hello World!"); // 計(jì)算目標(biāo)字符串的寬高,并調(diào)整臨時(shí)繪圖對(duì)象的尺寸 setcolor(WHITE); setfont(100, 0, _T("Arial")); g_nWidth = textwidth(s); g_nHeight = textheight(s); Resize(&img, g_nWidth, g_nHeight); // 輸出目標(biāo)字符串至 img 對(duì)象 outtextxy(0, 0, s); // 計(jì)算構(gòu)成目標(biāo)字符串的點(diǎn)的數(shù)量 int x, y; g_nCount = 0; for(x = 0; x < g_nWidth; x++) for(y = 0; y < g_nHeight; y++) if (getpixel(x, y) == WHITE) g_nCount++; // 計(jì)算目標(biāo)數(shù)據(jù) g_pDst = new POINT[g_nCount]; int i = 0; for(x = 0; x < g_nWidth; x++) for(y = 0; y < g_nHeight; y++) if (getpixel(x, y) == WHITE) { g_pDst[i].x = x + (640 - g_nWidth) / 2; g_pDst[i].y = y + (480 - g_nHeight) / 2; i++; } // 恢復(fù)對(duì)屏幕的繪圖操作 SetWorkingImage(NULL); } // 獲取源點(diǎn)集 void GetSrcPoints() { // 設(shè)置隨機(jī)種子 srand((unsigned int)time(NULL)); // 設(shè)置隨機(jī)的源數(shù)據(jù) g_pSrc = new POINT[g_nCount]; for(int i = 0; i < g_nCount; i++) { g_pSrc[i].x = rand() % 640; g_pSrc[i].y = rand() % 480; } } // 全屏模糊處理(忽略屏幕第一行和最后一行) void Blur(DWORD* pMem) { for(int i = 640; i < 640 * 479; i++) { pMem[i] = RGB( (GetRValue(pMem[i]) + GetRValue(pMem[i - 640]) + GetRValue(pMem[i - 1]) + GetRValue(pMem[i + 1]) + GetRValue(pMem[i + 640])) / 5, (GetGValue(pMem[i]) + GetGValue(pMem[i - 640]) + GetGValue(pMem[i - 1]) + GetGValue(pMem[i + 1]) + GetGValue(pMem[i + 640])) / 5, (GetBValue(pMem[i]) + GetBValue(pMem[i - 640]) + GetBValue(pMem[i - 1]) + GetBValue(pMem[i + 1]) + GetBValue(pMem[i + 640])) / 5); } } // 主函數(shù) void main() { // 初始化 initgraph(640, 480);// 創(chuàng)建繪圖窗口看 DWORD* pBuf = GetImageBuffer();// 獲取顯示緩沖區(qū)指針 GetDstPoints();// 獲取目標(biāo)點(diǎn)集 GetSrcPoints();// 獲取源點(diǎn)集 // 運(yùn)算 int x, y; for (int i = 2; i <= 256; i += 2) { COLORREF c = RGB(i - 1, i - 1, i - 1); Blur(pBuf);// 全屏模糊處理 for (int d = 0; d < g_nCount; d++) { x = g_pSrc[d].x + (g_pDst[d].x - g_pSrc[d].x) * i / 256; y = g_pSrc[d].y + (g_pDst[d].y - g_pSrc[d].y) * i / 256; pBuf[y * 640 + x] = c;// 直接操作顯示緩沖區(qū)畫點(diǎn) } Sleep(5);// 延時(shí) } // 清理內(nèi)存 delete g_pDst; delete g_pSrc; // 按任意鍵退出 _getch(); closegraph(); }
本文固定URL:http://www.sztianhecheng.cn/course/1374
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競(jìng)賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:
一點(diǎn)編程也不會(huì)寫的:零基礎(chǔ)C語言學(xué)練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進(jìn)階課程
從零到寫出一個(gè)爬蟲的Python編程課程
只會(huì)語法寫不出代碼?手把手帶你寫100個(gè)編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競(jìng)賽課入門課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程