minivg
今天正式发布一个初学者用的程序库——minivg。这个库结构简洁,使用方便,容易理解。包含基础的绘图函数,键盘鼠标控制,音乐、声音播放,是写小作品的不二选择。
值得一提的是,这个库封装了GDI+绘图接口,GDI+是Windows Vista之后的系统内置的绘图API(xp也能使用),比起传统GDI,在图像抗锯齿、ALPHA半透明等方面得到了支持,非常容易绘制出美轮美奂的图像。Vista之后的界面绘制效果,离不开GDI+的支持。
整个库不需要lib文件,也不需要dll文件,只需要在你的cpp文件里面#include <minivg.hpp>它就能工作!测试过的编译器有:C++Builder,vs2017+,gcc。
主文件:
minivg.hpp 主要接口,有注释说明。
minivg.inl 代码实现。
项目Github地址:https://github.com/sdragonx/minivg
博客地址:https://www.cnblogs.com/sdragonx/p/13184935.html
开源协议:MIT(代码在minivg.inl里面,开源,有兴趣自己可以琢磨)
Exsample:
void OnKeyDown(int Key); int main(int argc, char* argv[]) { //初始化窗口 initgraph(1024, 600, EZ_SIZEABLE); //设置按键响应函数 key_push_event(OnKeyDown); //绘图效果 effect_level(EZ_QUALITY); //播放音乐 play_music(TEXT("mp3音乐")); //主程序循环 while(do_events()){ clear(0, 0, 0);//清屏 pen_color(255, 0, 255, 128);//半透明红色 draw_line(10, 10, 100, 100);//绘制一条线 fill_color(0, 255, 0, 128);//半透明绿色 fill_rect(100, 100, 200, 200);//填充半透明矩形 }; //关闭库,释放资源 quit(); }
Exsample:(一些简单绘图的例子)
void display(); int main(int argc, char* argv[]) { // 初始化窗口 initgraph("窗口标题", 520, 640); // 设置绘制函数 display_event(display); // 绘图效果(高质量) effect_level(EZ_QUALITY); // 主程序循环 return start_app(); } void display() { //清屏 clear(0, 128, 255); //画笔颜色 pen_color(0xFFFFFFFF); //画笔样式,实心画笔 pen_style(EZ_SOLID); //绘制三条不同宽度的直线 pen_width(1); //画笔宽度 draw_line(10, 10, 110, 10); pen_width(2); draw_line(10, 20, 110, 20); pen_width(4); draw_line(10, 30, 110, 30); //画笔样式,点画模式 pen_style(EZ_DOT); //绘制三条不同宽度的直线 pen_width(1); draw_line(120, 10, 220, 10); pen_width(2); draw_line(120, 20, 220, 20); pen_width(4); draw_line(120, 30, 220, 30); pen_style(PS_SOLID); pen_width(1.0f); pen_color(255, 255, 255, 255); //绘制基本图元 draw_rect(10, 50, 100, 40); draw_roundrect(10, 100, 100, 40, 10, 10); draw_ellipse(10 + 50, 150 + 20, 100, 40); draw_circle(10 + 50, 200 + 20, 40); //填充颜色 fill_color(0, 255, 0, 255); //填充模式绘制基本图元 fill_rect(120, 50, 100, 40); fill_roundrect(120, 100, 100, 40, 10, 10); fill_ellipse(120 + 50, 150 + 20, 100, 40); fill_circle(120 + 50, 200 + 20, 40); //多边形 vec2f points[] = { vec2f(30, 420), vec2f(100, 500), vec2f(200, 520), vec2f(300, 500), }; pen_color(255, 255, 0, 255); draw_polygon(points, 4); //绘制多边形 fill_color(0, 255, 0, 64); fill_polygon(points, 4); //填充多边形 //文字输出 pen_color(0x7FFFFFFF); //绘制的边框颜色 font_name("微软雅黑"); //字体名称 font_size(16); //字体大小 font_color(255, 0, 0, 128); //字体颜色 draw_rect(10, 250, 200, 50); //绘制边框 drawtext(10, 250, 200, 50, L"文字左对齐。", EZ_CENTER_V); //输出字体 font_color(0, 255, 0, 128); draw_rect(10, 300, 200, 50); drawtext(10, 300, 200, 50, L"文字居中显示。", EZ_CENTER); font_color(0, 0, 255, 128); draw_rect(10, 350, 200, 50); drawtext(10, 350, 200, 50, L"文字右对齐。", EZ_CENTER_V|EZ_RIGHT); //图片绘制 ezImage* image = loadimage("assets/nv.png"); static float angle = 0.0f; for(int i=0; i<10; ++i){ rotate_image(image, 512 + i * 32, 200 + i * 20, image->width() / 1 - i * 40, image->height() / 1 - i * 40, angle + i * 16); } }
sdragonx https://github.com/sdragonx