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

场景: 有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需要把位图数据转换成矩阵, 所以影响了绘制速度

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值