DC绘制矢量图与OpenCV绘制矢量图的比较

来源:互联网 发布:mui.min.js下载 编辑:程序博客网 时间:2024/06/04 20:07

场景: 有100000条直线, 需要绘制出来, 并且保存为BMP文件, 直线很长, bmp文件很大

一. 方法1

使用OpenCV.

大概步骤:

A. 创建图像

pCVImage = cvCreateImage(cvSize(sizeBmp.cx, sizeBmp.cy), 8, 1);


B. 循环绘制直线

cvSet(pCVImage, CV_RGB(255, 255, 255));

cv::Mat mat(pCVImage);

CvPoint point1, point2;

loop:

cv::line(mat, point1, point2, CV_RGB(0, 0, 0));


C. 保存为图片

cvSaveImage("C:\\cv.bmp", pCVImage);


二. 方法2:

使用Window 内存DC绘制, 然后保存为BMP图片. 

使用内存DC绘制有一点复杂, 要注意的问题有:

A. 内存Bitmap的大小问题, 如果使用CBitmap创建不能创建大的bmp图片, 所以只能使用CreateDIBSection来创建Bitmap.

B. BITMAPINFOHEADER填充容易出错, 特别是考虑不同位数的Bitmap时, 注意颜色表的正确解析和填充.

C. 从DC保存为BMP图片, BMP图片格式需要自己处理. 并且需要从CDC中获得BMP的各个数据.

三. 方法3

使用CDib

(没有时间尝试!!!!!!!!!!!)


四. 比较结果

使用内存DC绘制比OpenCV绘制快(在数据量相同, 位数相同的情况下, 快1.5至2倍),

但OpenCV使用上很方便.

(这里指比较绘制速度, 没有比较保存文件的速度)

我的理解是OpenCV需要把位图数据转换成矩阵, 所以影响了绘制速度