VC的图形功能。

sthdor 2001-07-22 12:12:26
以下一段OnDraw(CDC *pDC)中的代码,显示包含入应用程序中的bmp图片IDR_BMP:
1. CClientDC dc(this);
2. CDC Mem_dc;
3. CBitmap bmp;
4. Mem_dc.CreateCompatibleBitmap(&dc);
5. bmp.loadBitmap(IDR_BMP);
6. Mem_dc.selectObject(&bmp);
7. dc.BitBlt(0,0,200,200,&Mem_dc,0,0,SRCCOPY);

为什么一定要做了第4句程序才能成功load IDR_BMP资源,设备文本描述表类CDC以及客户设备文本描述表类CClientDC实际是指内存区域吗?我是过去掉第1句,而将其他语句中出现dc的部分改为pDC,程序仍可顺利正确的执行,那么这里的pDC与dc有区别吗?还有就是要load图片必须先将图片导入程序成为其资源,我在第5句试图以:bmp.loadBitmap("d:\\photo\\snow.bmp")的形式load磁盘图片,编译连接通过,但执行的结果却无法load所指图片,那么要load磁盘鱼片应用什么函数(或应用什么方法).
另外,如果我用
struct tagBITMAP pBitmap;
bmp.GetBitmap(&pBitmap);
将取得的bmp对象所连接的bmp图片信息送入pBitmap这一BITMAP结构中,那么pBitmap->bmBits是否就是bmp图片的RGB数据区的第一个字节的首地址(指针),还是整个bmp图片数据(包括头结构)的首地址。
急,望明白的朋友帮我解解,也可发Email告诉我:sthdor2000@citiz.net
...全文
156 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoy 2001-07-30
  • 打赏
  • 举报
回复
其实对位图问题,<深入VC++内幕>Chap10讲得够清楚的啦
这个论坛也有很多人问过了,你查查看,可以找到N个贴子。
如果看完这些还不understand的话,chinamofee@sohu.com
HowUCan 2001-07-30
  • 打赏
  • 举报
回复
petzold著的《programming windows》关于位图和调色板有较深刻的论述,今天的帖子里就有人问下载的地方,可去看看。
www.eshunet.com的电脑书籍里也有,是英文的,不过应该没什么困难。
潘李亮 2001-07-30
  • 打赏
  • 举报
回复
我是Nhsoft,我的E mail 是Nhsoft@263.net 不可能没用的吧 兄弟!
sthdor 2001-07-23
  • 打赏
  • 举报
回复
coolxiao,先谢谢你上头的一段代码,有些明白了,调色板的电子书你帮我找找吧,找到了把URL Mail到sthdor2000@citiz.net,OK!
还有个朋友发了封Email到我信箱,叫NHsoft@263.net,先谢了,你的Email地址是不是有错啊,我回不了!
coolxiao 2001-07-22
  • 打赏
  • 举报
回复
HBITMAP hBmp=LoadImage(NULL,"d:\\see\\snow.bmp",
IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
先获得位图的句柄。
CBitmap *pBmp=CBitmap::FromHandle(hBmp);
然后后面操作照常。
关于调色板的知识我一下子也讲不清楚,我想你还是找本书详细看看,如果实在找不到,可以
email:coolxiao@263.net,我帮你找一些啦。

不懂就问,不要怕被取笑啊,否则没有提高的。嘿嘿,我也是菜鸟,只能帮这么多了。
潘李亮 2001-07-22
  • 打赏
  • 举报
回复
兄弟,是LoadImage();不是Loadimage() :-)
sthdor 2001-07-22
  • 打赏
  • 举报
回复
我将第5,6句改为:

5 Loadimage(bmp.operator HBITMAP,"d:\\see\\snow.bmp",
IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
6 Mem_dc.SelectObject(&bmp);
这样可以吗?为什么编译提示'Loadimage' : undeclared identifier,我明明已在MyseeView.cpp开头用了:include "windows.h"(是不是因在其文件中包含windows.h,它好像是个API函数,是吗?);还有就是,Loadimage返回的是什么?第5句有语法错误吗?
要是我问的问题比较弱别见笑:)


jerry2 2001-07-22
  • 打赏
  • 举报
回复
调色板索引是8位及以下颜色调用的模式,DIRECTDRAW中的调色板接口就是为8位以下颜色模式设立的。你可以看看计算机图形学方面的东西。
8位颜色模式就是所谓的256色。
sthdor 2001-07-22
  • 打赏
  • 举报
回复
请问coolxiao,如果位图不是24位的,那你说的调色板索引又指什么,我不太明白?能简略讲讲吧!
jerry2 2001-07-22
  • 打赏
  • 举报
回复
CClientDC是用来访问当前窗口client area的DC的。而OnDraw是你的当前窗口重绘时执行的,所以传递过去的pDC就是你的当前的整个窗口,包含了client area.
你可以使用loadimage函数load BMP,这个比较常用的。
nustchen 2001-07-22
  • 打赏
  • 举报
回复
1、dc改成pDC应该是可以的,应该是你的程序写得有问题,贴出来先。
2、LoadBitmap只能load资源,因此对于磁盘图片,首先应该加入工程成为资源,然后才能LoadBitmap,否则你不能使用CBitmap类来load。
3、是数据区的地址,不包括头。
coolxiao 2001-07-22
  • 打赏
  • 举报
回复
对于你的第一个问题,我个人没有深刻理解,不敢乱讲,还是等高手回答吧。我只是觉得直接往活动的dc中select一幅位图的话,数据量很大,对显示的效果影响会很大。
但是应该不是只有做了第4句才能load资源的,只要你已经import进位图资源,任何时候都可以使用。
windows有直接从位图文件获得其句柄的函数。LoadImage(),详细可以看msdn。
如果位图是24位的,pBitmap.bmbits所指的就是RGB数据,如果位图有调色板,所指的就是调色板索引了。
sunyanbiao_12 2001-07-22
  • 打赏
  • 举报
回复
先站个位子,关注。

16,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧