场景: 有100000条直线, 需要绘制出来, 并且保存为BMP文件, 直线很长, bmp文件很大
大概步骤:
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);
使用Window 内存DC绘制, 然后保存为BMP图片.
使用内存DC绘制有一点复杂, 要注意的问题有:
A. 内存Bitmap的大小问题, 如果使用CBitmap创建不能创建大的bmp图片, 所以只能使用CreateDIBSection来创建Bitmap.
B. BITMAPINFOHEADER填充容易出错, 特别是考虑不同位数的Bitmap时, 注意颜色表的正确解析和填充.
C. 从DC保存为BMP图片, BMP图片格式需要自己处理. 并且需要从CDC中获得BMP的各个数据.
使用CDib
(没有时间尝试!!!!!!!!!!!)使用内存DC绘制比OpenCV绘制快(在数据量相同, 位数相同的情况下, 快1.5至2倍),
但OpenCV使用上很方便.
(这里指比较绘制速度, 没有比较保存文件的速度)
我的理解是OpenCV需要把位图数据转换成矩阵, 所以影响了绘制速度