社区
界面
帖子详情
大于256色的位图怎样导入?用LoadBitmap()不行。
rogers008
2003-08-24 02:29:11
大于256色的位图怎样导入?用LoadBitmap()不行。曾经用过,一下子想不起来了,哪位记得?提示一下!
...全文
66
2
打赏
收藏
大于256色的位图怎样导入?用LoadBitmap()不行。
大于256色的位图怎样导入?用LoadBitmap()不行。曾经用过,一下子想不起来了,哪位记得?提示一下!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
flinming
2003-08-24
打赏
举报
回复
up
bcpl
2003-08-24
打赏
举报
回复
用LoadImage
Led 显示 类 数码管 数码 数字
文件名: LedDisp.h 版本号: v1.0.5 (v20091122.00001) 功能: 显示七段数码管风格的数字、小数点、冒号及部分字母。 (此版本理论上可用于MFC,Win32 SDK或其它环境,在Windows XP sp2下用vc6.0及vs2008编译、运行通过.) 第一作者: Jef 日期: 20091122 电子邮件: dungeonsnd@126.com 地址: 中国/江苏 版权: 1.您可以修改及免费使用本程序,但把本程序或修改后程序用于商业用途前请先通知第一作者并得到作者的许可。 2.修改之后保留此文件开头处的文件说明信息并更改副版本号(如 v20090825.00001 改成 v20091002.00001 ), 并拷贝一份附上您的个人信息发送到上面的作者邮箱,作者负责在全面测试后发布您修改后的新版本。 3.您使用本程序而导致任何伤害以及经济损失,由过错方依法承担所有责任,一概与第一作者及合作单位无关。 4.如果您使用本程序则表示您已经同意此版本协议!否则请勿使用! 其它: v1.0.1 (v20090825.00001) v1.0.2 (v20091026.00001) 1.增加Hide()方法 2.增加IsHide()方法 3.增加Disp(CDC* pdc,CRect DispRect,int iDigitsAmount,CString cs);方法 4.等 v1.0.3 (v20091031.00001) 1.增加多个小数点和冒号显示支持 2.增加GetLedFont()方法 3.修改了显示熄灭数码管的内部实现 4.等 v1.0.4 (v20091105.00001) 1.修改了SetSegmentPosition(int index)函数,增加内部属性 修正因子m_bMakeAmend, 设置修改因子为真时,在特殊情况下(如用户设置段宽度为2个像素或者1个像素), 程序将保证所有段的宽度相等,并且保证段与段不会相连. 2.修改了保存显示区域背景机制! 前一版本在调用数码管显示函数(Disp()等函数)时会自动 保存一幅对应于显示区域RECT的
位图
,此种机制当用户在OnPaint()函数里调用显示 函数而不调用Hide()时,并且此时的RECT在每次调用显示函数时都改变,则会导致保存 背景
位图
的向量m_vecBkSave不断扩大,而实际上保存的
位图
将没有作用且浪费大量内存! 如: void CLEDView::OnPaint() { CPaintDC dc(this); OnShow(); //不断的以不同的RECT区域调用Disp()将导致保存的 //
位图
(对应于每个区域)数量剧增! } void CLEDView::OnShow() { CClientDC dc(this); CRect rtClient; GetClientRect(&rtClient); double m_x =rtClient.Width()/800.0; double m_y =rtClient.Height()/600.0; CRect rt0; rt0.SetRect(20*m_x,10*m_y,220*m_x,410*m_y); led.Disp((CDC*)&dc,rt0,1,_T("1:")); } 解决方案: 保存
位图
将不再以RECT来标识,而是以一个用户输入的字符串来标识. 3. 添加MFC之外框架的支持.(未完成,未测试,希望测试的用户给作者联系测试结果.如WIN32 SDK,WTL等环境下.) v1.0.5 (v20091122.00001) 1. 增加UNICODE支持 2.完成MFC外的某些框架的支持 3.修改了和完善了某些代码段。如 删除保存背景的 向量某一元素之前先把其中的
位图
删除; 内存dc用完之后添加删除操作 DeleteDC ; 构析函数中增加了删除 全部
位图
资源操作 4. 修改了数个变量名使其更统一,如 SHOWPOS改成了iShowPos; 删除了某些接口,如 DispInt(); 2.说明及注意 (Attention!) a.支持 改变数码管亮时的颜
色
灭时颜
色
区域背景
色
,支持居左居中居右显示,支持细调显示的位置(SetFont();)及数码管粗细等细节. 支持距离左或右一定距离显示字符串(m_iDistaceToRight). 支持创建不定数量的自定义字体(LedFontID来表示已创建的不同字体,已经创建过的字体被再次创建时则改写这个字体). 支持默认参数(调用时可以依次不传递有默认值参数). b.显示的字符的宽度与高度不随窗口的大小变化而自动变化,故调用者应自行处理. c.内部不含自动重画功能,故调用者应自己处理窗口重绘时字符的重新显示. d.字符串内可同时含 ":"与"." ,但字符串左起第一个字符不能为":"或"." ,且不能连续两个不点位符号,如小数点或冒号!! e.能显示的字符包括 0-9,a-f,A-F,".",":","-" f.如 bool Disp(HDC hDc,RECT rtDispRect,TCHAR* cs,int iFontWidth,int iFontHeight,TCHAR* strIdentifier=_T("LedValue1")); 用户应自己设置好 rtDispRect与iFontWidth iFontHeight 的大小关系. 如果iFontHeight
大于
rtDispRect.Height(),则超出DispRect区域显示字符. 但左右可能不会超出显示(用户可设置m_bShowWhenOverstepRect来控制是否显示). 调用者应自己保证使字符串能全部显示在DispRect中,否则超出部分可能不会显示!!! g.当字符的宽度与数码管的每一段的宽度比例严重失调时,显示的字符会严重失真(如数码管每一段宽度为5个像素, 而长度却也为5像素则显示效果将失真)! 一般情况下,iFontHeight=2*m_iFontWidth,m_dSegmentWidth远小于m_iFontWidth h. led.SetColor(RGB(0,200,0)) 等方法会改变类的字体属性,故之后调用显示时字体属性都会发生改变. 但创建新的字体时不会改变类的字体属性. i.调用 Disp(...,strIdentifier)等此类数码管显示函数显示数码管后, 显示区域的背景及区域会自动保存. 1.再次调用Disp(...,strIdentifier)时会用新的显示区域的背景替换原背景及区域; 2.调用Hide(...,strIdentifier)方法时程序会自动删除strIdentifier对应原
位图
及区域,然后隐藏该区域的数码管(用原背景
位图
贴在此区域); 3.对象析构时会自动删除已经保存的所有的背景
位图
及区域. 3.使用方法(仅举一种使用方法) (Using e.g.) i. void CLEDView::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: Add your message handler code here OnShow(); // Do not call CView::OnPaint() for painting messages } void CLEDView::OnShow() { // TODO: Add your command handler code here CClientDC dc(this); CRect rtClient; GetClientRect(&rtClient); C
Bitmap
bmp; bmp.
Load
Bitmap
(IDB_
BITMAP
1); CDC memdc; memdc.CreateCompatibleDC(&dc); memdc.SelectObject(&bmp); dc.StretchBlt(0,0,rtClient.Width(),rtClient.Height(),&memdc,0,0, 800,600,SRCCOPY); double m_x =rtClient.Width()/800.0; double m_y =rtClient.Height()/600.0; CRect rt0; rt0.SetRect(int(20*m_x),int(10*m_y),int(420*m_x),int(80*m_y)); CString s; s ="123-:1:."; TCHAR str[
256
]; sprintf(str,"%s",s); led.DispDigits((HDC)dc,rt0,str,7,_T("Led1")); } void CLEDView::OnHide() { // TODO: Add your command handler code here CClientDC dc(this); led.Hide((HDC)dc,"Led1"); } ii. CClientDC dc(this); ...... CRect rt0; rt0.SetRect(int(20*m_x),int(10*m_y),int(420*m_x),int(80*m_y)); CString s; s ="123-:1:."; led.Disp_mfc((CDC*)&dc,rt0,s,27,45,_T("Led1")); */
显示
256
色
的
位图
问题
显示
位图
似乎相当简单。在应用程序的资源中添加一张漂亮的
位图
,使用函数
Load
Bitmap
将
位图
装 入内存,然后将
位图
选入设备描述表,再使用函数 BitBlt 便可显示出
位图
。但是这样显示的
位图
和目标环境或许有所不同。比如在
256
色
的环境里,即使你载入的是
256
色
位图
,也会按屏幕颜
色
(一般为24位
色
)画出,那应该怎么按
位图
原来的颜
色
画出呢?方法
要显示
位图
,首先必须了解 Windows 中
位图
的概念。
位图
有两种基本格式:设备相关
位图
(DDB) 和设备无关
位图
(DIB)。在
Windows游戏编程系列之1:GUI窗口界面编程及游戏入门实战
位图
简介 38 1)在资源中添加
位图
资源 39 2)从资源中加载
位图
:
Load
Bitmap
39 3)创建一个与当前DC相匹配的DC(内存DC) 39 4)将
bitmap
放入匹配的DC中:SelectObject 40 5)成像(1:1 比例 ) 40 6)取出
位图
40...
如何在MFC对话框中添加背景图片
1、把你的图包含到程序的“
Bitmap
资源”里,提示说该资源使用了
大于
256
色
的调
色
板,在VC里无法编辑等等,点确定就可以 2、定位到 void CXXXDlg::On Paint(),在if()...else()中的else()下添加如下代码 else { //CDialog::On Paint();//要禁止这个调用 ...
GDI
位图
和DIB
位图
是两种不同的Windows
位图
GDI
位图
和DIB
位图
是两种不同的Windows
位图
,GDI
位图
是MFC的C
Bitmap
类表示的,在C
Bitmap
类的对象中,包含了一种和Windows的GDI模块有关的Windows数据结构
BITMAP
,该结果是与设备有关的,应用程序可以得到GDI
位图
数据的一个备份,但其中
位图
的安排完全依赖于显示设备。在同一台机器中,我们可以将GDI
位图
在不同
界面
15,979
社区成员
115,897
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章