社区
非技术类
帖子详情
请问能否把在CDC中画的矢量图,如一条直线或圆转换成bmp形式??????
dirdir
2002-01-18 08:32:58
...全文
204
8
打赏
收藏
请问能否把在CDC中画的矢量图,如一条直线或圆转换成bmp形式??????
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zzh_haiz
2002-03-13
打赏
举报
回复
学习!
azuo_lee
2002-01-19
打赏
举报
回复
to Jady:
1。DC中的确是DDB,但是把一个DIB位图选入DC完全合法;
2。BitBlt的名字是“位块拷贝”,但它实际执行操作的对象是DC,而不是BITMAP。
基于以上两点,以下流程绝对不会有问题:
1。CreateDIBSection创建一个DIB,但并不填入实际像素数据;
2。CreateCompatibleDC创建一个内存DC;
3。将DIB选入内存DC;// SelectObject
4-1。如果直接在此内存DC上绘制,4-2与5两步可以略过;// Draw
4-2。如果在屏幕DC上绘制图形,则必须执行5;// Draw
5。使用BitBlt将屏幕DC复制到内存DC;
6。现在刚刚创建的DIB中存储的就是绘制的图形,而且由于DIB是我们创建的,我们有它的所有结构和像素点数据指针,存储到bmp文件非常方便。
再考虑您使用GetDIBits的流程:
1。创建一个位图;
2。CreateCompatibleDC创建一个内存DC;
3。将位图选入内存DC;
4-1。如果直接在此内存DC上绘制,4-2与5两步可以略过;
4-2。如果在屏幕DC上绘制图形,则必须执行5;
5。使用BitBlt将屏幕DC复制到内存DC;
6。对刚才内存DC中选入的位图调用GetDIBits函数;
7。根据GetDIBits中指定的DIB类型得到DIB数据,将它保存到bmp文件。
很显然,GetDIBits要多一道步骤(如果把绘制图形算作一次函数调用,第一种方法调用4或5次函数即可存盘,第二种方法要调用5或6次)。并且有如下结论:如果直接绘制到内存中,则BitBlt不需要使用;但如果是画在屏幕上,BitBlt必须使用。
以上两种方法的区别在于:第一种方法,系统效率主要消耗在SelectObject的时候,即GDI不得不把DIB位图转换为DDB位图,这在DIB规定的位图格式与DC中像素格式不符时是一个费时的操作;第二种方法系统效率主要消耗在GetDIBits的时候,GDI不得不作与上述过程相反的操作。
对于需要频繁使用SelectObject而存盘只有一次的情形,使用第二种方法显然效率会高一些——但无论如何,在使用第一种方法必须调用BitBlt的情况下,使用第二种方法也不可能避免BitBlt的使用。我不知道我说BitBlt错在哪里?
有品的和弦
2002-01-18
打赏
举报
回复
我建议你直接用位图画,虽然麻烦点,但挺好玩的
spark_zh
2002-01-18
打赏
举报
回复
先生成一个内存dc,在上面画图,最后再把它换出来。
CDC * pDC;
pDC = GetDC()
CBitmap bmp;
CBitmap *oldBmp,*newBmp;
oldBmp = new CBitmap;
newBmp = new CBitmap;
bmp.CreateCompatibleBitmap(pDC,宽,高);
CDC memDC;
memDC.CreateCompatibleDC(&dc);
oldBmp = memDC.SelectObject(&bmp);
memDC.FillSolidRect(CRect( ),RGB( ));//画上底色要不然是黑的
//画线
memDC.LineTo...
.
.
newBmp = memDC.SelectObject(oldBmp);
这个newBmp就是画了图的CBitmap指针
Jady
2002-01-18
打赏
举报
回复
CDC中的是设备有关的位图,而bmp是设备无关的。BitBlt只是进行设备有关的位图之间的copy。当要bmp文件时需要设备有关的位图转换到设备无关的位图;所以参看MSDN的GetDIBits函数。azuo_lee不要误人子弟。
-Jady
masterz
2002-01-18
打赏
举报
回复
http://www.codeguru.com/bitmap/ImageHandler.html
http://www.codeguru.com/bitmap/window_to_file.shtml
Jady
2002-01-18
打赏
举报
回复
当然可以。
参看MSDN的GetDIBits函数。
-Jady
azuo_lee
2002-01-18
打赏
举报
回复
CDC中没有矢量图。凡是画到CDC上的东西本身就是BMP。BitBlt把它拷贝出来就行了。
基于com和VC的画图形程序
基于com的VC画图程序,在VC中调用com接口实现不同图形的绘画并完成保存
MFC编写的二维绘图工具及其制作文档
用MFC编写的二维绘图工具,还包括其制作文档
DC绘制
矢量图
与OpenCV绘制
矢量图
的比较
场景: 有100000条
直线
, 需要绘制出来, 并且保存为
BMP
文件,
直线
很长,
bmp
文件很大 一. 方法1 使用OpenCV. 大概步骤: A. 创建图像 pCVImage = cvCreateImage(cvSize(size
Bmp
.cx, size
Bmp
.cy), 8, 1); B. 循环绘制
直线
cvSet(pCVImage, CV_RGB(255, 255, 2
emWin(ucGUI)显示图案的3种方式:API,位图,
矢量图
通过emWin在屏幕上显示图案,先大致说一下这3种方案的实现步骤,再结合例子详细说: 1、GUI自带的API接口:听着怪高大上的,其实就是GUI已经封装好的函数,我们只需要根据使用手册明白哪个函数是干啥的,需要输入哪些参数,直接调用就好了。 2、位图:把图案以PNG等格式下载,再通过转换软件将PNG图片转成 位图.c文件,借助GUI的API函数加载到显示屏。 3、
矢量图
:把图案以ttf文件的
形式
下载,放到单片机QSPIFlash或者SD卡里。告诉程序这个文件的存放路径、图案编号,借助GUI的API函数加载
java equals原函数_搜索结果
1. 概述1.1 简介使用VC开发平台,MFC框架实现一个画图程序,尽可能多的实现Windows自带的画图功能,并扩展其功能。1.2 功能需求1.2.1 基本绘图功能能够用鼠标操控方式,绘制
直线
、矩形、椭
圆
。在绘图时,选择绘制某种图像后(如
直线
),在画布中按住鼠标左键后移动鼠标,在画布中实时的根据鼠标的移动显示相应的图形。在松开鼠标左键后,一次绘图操作完成。能够在绘制一图形(如
一条
直线
)前设...
非技术类
1,660
社区成员
58,949
社区内容
发帖
与我相关
我的任务
非技术类
VC/MFC 非技术类
复制链接
扫一扫
分享
社区描述
VC/MFC 非技术类
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章