说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

如何在内存中画好图,再在屏幕上显示出来?

编辑:说三道四文库 发布时间:2017-10-21 07:36
HTML文档下载 WORD文档下载 PDF文档下载
下面的代码没有达到预期的效果,请高手指点一二,谢谢!
void CSaveBmpView::OnDraw(CDC* pDC)
{
CSaveBmpDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

CRect rect;
GetClientRect(&rect);

CDC dcMem;
dcMem.CreateCompatibleDC(pDC);

BITMAPINFO bi;
memset(&bi,0,sizeof(bi));
bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bi.bmiHeader.biWidth = rect.Width();
bi.bmiHeader.biHeight = rect.Height();
bi.bmiHeader.biPlanes = 1;
bi.bmiHeader.biBitCount = 24;
bi.bmiHeader.biCompression = BI_RGB;

UINT *bits;
HBITMAP hBitmap = 
::CreateDIBSection(dcMem.m_hDC,&bi,DIB_RGB_COLORS,(void**)&bits,NULL,0);

::SelectObject(dcMem,hBitmap);

//填充一个四边形
int xLeft,yTop,xRight,yBottom;
xLeft = rect.left + 100;
yTop = rect.top + 100;
xRight = rect.right - 100;
yBottom = rect.bottom - 100;

dcMem.MoveTo(xLeft,yTop);
dcMem.LineTo(xRight,yTop+50);
dcMem.LineTo(xRight-50,yBottom);
dcMem.LineTo(xLeft,yBottom-50);
dcMem.LineTo(xLeft,yTop);

CBrush brush;
brush.CreateSolidBrush(RGB(0,255,0));
CBrush* pOldBrush = dcMem.SelectObject(&brush);

dcMem.FloodFill(xLeft+10,yTop+50,RGB(0,0,0));

dcMem.SelectObject(pOldBrush);
//End fill!

pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcMem,rect.left,rect.top,
SRCCOPY);

SaveBmpToFile("Temp.bmp",&bi,bits);
}

int CSaveBmpView::SaveBmpToFile(const char *filename, BITMAPINFO *info, UINT *bits)
{
FILE* fp;
UINT size, //Size of file
infosize, //Size of bitmap info
bitsize;  //Size of bitmap pixels
BITMAPFILEHEADER header;
if((fp = fopen(filename,"wb")) == NULL)
return -1;
if(info->bmiHeader.biSizeImage == 0)
bitsize = (info->bmiHeader.biWidth *
info->bmiHeader.biBitCount+7)/8*
abs(info->bmiHeader.biHeight);
else
bitsize = info->bmiHeader.biSizeImage;

infosize = sizeof(BITMAPINFO);
size = sizeof(BITMAPFILEHEADER)+infosize+bitsize;

header.bfType = 'MB';
header.bfSize = size;
header.bfReserved1 = 0;
header.bfReserved2 = 0;
header.bfOffBits = sizeof(BITMAPFILEHEADER)+infosize;

if(fwrite(&header,1,sizeof(BITMAPFILEHEADER),fp) < 
sizeof(BITMAPFILEHEADER))
{
fclose(fp);
return -1;
}

if(fwrite(info,1,infosize,fp) < infosize)
{
fclose(fp);
return -1;
}

if(fwrite(bits,1,bitsize,fp) < bitsize)
{
fclose(fp);
return -1;
}

fclose(fp);
return 1;
}
不要使用 CreateDIBSection, 还是使用 CBitmap 比较好,使用CreateDIBSection 一般是为了直接操作位图数据。
http://www.ccw.com.cn/htm/produ/special/VC/jiqiao/01_9_13_20.asp
::CreateDIBSection(dcMem.m_hDC,&bi,DIB_RGB_COLORS,(void**)&bits,NULL,0);
上面的DC用pDC,不要用dcMem
楼上几位还是没发现问题啊,我调试了半天才发现
void CSaveBmpView::OnDraw(CDC* pDC)
{
CSaveBmpDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

CRect rect;
GetClientRect(&rect);

CDC dcMem;
dcMem.CreateCompatibleDC(pDC);
dcMem.FillSolidRect(rect, RGB(255,255,255));

BITMAPINFO bi;
memset(&bi,0,sizeof(bi));
bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bi.bmiHeader.biWidth = rect.Width();
bi.bmiHeader.biHeight = rect.Height();
bi.bmiHeader.biPlanes = 1;
bi.bmiHeader.biBitCount = 24;
bi.bmiHeader.biCompression = BI_RGB;
UINT *bits;
HBITMAP hBitmap = 
::CreateDIBSection(dcMem.m_hDC,&bi,DIB_RGB_COLORS,(void**)&bits,NULL,0);

::SelectObject(dcMem.GetSafeHdc(), hBitmap);
dcMem.FillSolidRect(rect, RGB(255,255,255));

//&Igrave;&icirc;&sup3;&auml;&Ograve;&raquo;&cedil;&ouml;&Euml;&Auml;±&szlig;&ETH;&Icirc;
int xLeft,yTop,xRight,yBottom;
xLeft = rect.left + 100;
yTop = rect.top + 100;
xRight = rect.right - 100;
yBottom = rect.bottom - 100;

dcMem.MoveTo(xLeft,yTop);
dcMem.LineTo(xRight,yTop+50);
dcMem.LineTo(xRight-50,yBottom);
dcMem.LineTo(xLeft,yBottom-50);
dcMem.LineTo(xLeft,yTop);

CBrush brush;
brush.CreateSolidBrush(RGB(0,255,0));
CBrush* pOldBrush = dcMem.SelectObject(&brush);

dcMem.FloodFill(xLeft+10,yTop+50,RGB(0,0,0));

dcMem.SelectObject(pOldBrush);
//End fill!

pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcMem,rect.left,rect.top,
SRCCOPY);

SaveBmpToFile("Temp.bmp",&bi,bits);
}
有两种方法
1.记录点然后把他连起来。
2.记录图象的特征然后绘画出来,如圆有圆心,半径。画N个圆就存储N个这样的信息然后绘画出来。
deadhorse(死马) 是正确的!

我试了!
up
CBitmap backBitmap;
CDC mem;
mem.CreateCompatibleDC(pDC);
backBitmap.CreateCompatibleBitmap(&mem,wid,hei);
CBitmap* oldBit=mem.SelectObject(&backBitmap);
mem.TextOut("It's testing !",102,11);
pDC->BitBlt(0,0,wid,hei,&mem,0,0,SRCCOPY);
mem.SelectObject(oldBit);
曾经那些主流的API,而今风光已不再! Android 4.3本月9日亮相 新功能汇总 移动游戏的国际化运营技巧 Google的Janus与Facebook的McDipper:将闪存用于数据中心 拥抱开源还是坚守阵地:传统数据库供应商面临抉择 超棒的30款JS类库和工具 立场坚定:惠普仍然密谋回到智能手机市场 6月份浏览器份额:Chrome成市场份额增长最快浏览器 关于PHP的十大误解 你中了几个? 专访西电朱虎明:异构计算硬件架构呈现百花齐放 百家争鸣 GSMA行纪:各种神器、好玩的、好看的全搜罗 大数据初创企业WibiData将Hadoop“打包”,谷歌董事长施密特两次参投 赚钱不忘环保 苹果计划为数据中心兴建太阳能发电厂 深度解析:清理烂代码 电信开放平台发布短信验证码API 创业教父Paul Graham谈创业投资趋势 挖掘Linux人才,打造Power生态系统!IBM启动“天合应用服务器定义未来挑战赛” 请不要忽略API的安全性 发布将近?苹果在多地注册“iWatch”商标 苹果聘请某时尚公司CEO为副总裁 将负责“特殊项目” 雅虎5000万美元收购视频分享应用Qwiki 创业第一年易犯的8大错误 苹果推iOS游戏手柄,掌上游戏主机格局变天? 代码审查固然伟大,那还有其他替代品吗? 怎样维护一个成功的开源项目 麻省理工专家发布新系统Ascend,专注内存访问安全缺陷 Oracle Database 12c面临的最大挑战是开源+开放的生态系统?! 浸入式数据中心:高密度计算的新前沿 2013年腾讯合作伙伴大会要点回顾 “鼠标之父”和超文本研究先驱Douglas Engelbart去世 享年88岁 Web服务器排行:Nginx超越Apache 成为全球TOP 1000网站最常用的Web Server 大家进来看看这个效果怎么做! 哪能找到关于网络侦听的源程序?用VC做的,谢谢! 九月份就大四了,要分方向了,大家给点意见? 如何禁用ie选项中的“显示友好的http错误信息” 接了一个小小的酒店管理系统,问一下,值多少钱?(可别说我做坏了市场:)) 程序员考试的资料在哪下载?(.pdg的文件用什么阅读?) 我下载了JDK1.4.1_03安装以后JDK目录里没有1.3的Javac文件呀? 新手的问题(asp的源代码): vector&父类子类的问题 单片机如何实现霓虹灯控制,谢谢。 ASP操作oracle数据库,是不是只能用SQL语句实现 哪里有介绍NAT(网络地址转换)原理的网站? win2000下,的计算机管理--磁盘管理--选中c盘--右键--属性--工具--查错,选中扫描并试图恢复坏扇区........... Session会无故消失!! 请大家注意FAQ的提交! ---如何在linux下编译IDL文件--- 求Rational purifyplus for Linux 的license 简单sql语句问题 VB编译好的程序为何不能在没装VB上运行? vector&父类子类的问题 有关三角矩阵乘法 如何编写ASP类? servlet调用Oracle,如何使用jdbc直接进行连接?高分相赠 我的2000 pro 总是出现超频保护 大家快来接分了!!!! 怎样让一个窗体总是在桌面的最前面,不会被其他程序的窗口挡住? 送分啦 dshow的入门级问题,请指教 那种开发工具开发效率较高 xp的问题 "处理中的数据超过允许的极限"是怎么回事? 为什么我的.net在建web工程设置断点后无法调试,加上了button后无法显示。谢谢了。 我现在大概有10万资金,可以做什么投资回报比较大呢?? 请教关于动态控件内存释放问题~(老问题新谈,高手请进)~~ SQL的一个问题!(高手请进!!!) 发个笑话,爆笑(转贴) 通过远程视图不能修改记录 cet-8跟英语专业八级是一回事吗? 关于图象处理 急急~~!!在哪儿能下载Flash插件呢!! 如何设定一个窗体的弹出广告在找开后自动关闭 水晶报表一对多问题?? 一个关于表单提交的超级简单,超级奇怪的问题? 怎样实现vb6中datagrid控件的打印 SQL select 语句如何对images进行操作? 怎样实现vb6中datagrid控件的打印 水晶报表一对多问题?? 使用oracle传递日期型数据问题 好好急啊 如何当数据集的纪录移动的时候,触发一个事件,以响应我需要的作的工作?? 有关括号配对,在先求救! c#中制作安装程序,如何包含.net框架程序。 运营商怎么连接因特网的是靠物理线路(光纤)还是服务器和服务器之间传送数字信号(无线)类似手机通信求懂的人回答 不懂的别误人子弟 如果(x+a)(x-a)=x^2+bx-6对于x的任何值都成立,那么a、b的值分别为a=3,b=5 B.a=3,b=1 C,a=-3,b=-1 D.a=-3,b=-5(x+a)(x-2)=x^2+bx-6 = 刚才题目打错了 该怎么写生活日记 通信基站里有个叫DF 的是什么东西呀 已知a^2+b^2=1,对于满足条件0≤x≤1的一切实数x,a(1-x)(1-x-ax)-bx(b-x-bx)≥0恒成立,当ab乘积最小时,求ab 生活日记要怎么样写 关于CRC校验66生成多项式G(x).带有校验和的帧的多项式f(x).G(x)除f(x)得到余数多项式.我知道G(x)是相互预定的.那个f(x)是怎么产生的? 关于罗尔定理罗尔定理的逆定理是否正确 已知f(x)=ax*2+bx+c,当x属于[-1,1]时,都有-1≤f(x)≤1成立,且a+b=2,则a-b= 关于CRC校验10生成多项式G(x).带有校验和的帧的多项式f(x).G(x)除f(x)得到余数多项式.我知道G(x)是相互预定的.那个f(x)是怎么产生的? 偷袭的英文怎么说? (1/2)选择题 当x不等于负的b分之5时 ,(-bx -5 ) 分之(a +x ) =2成立 ,则a的平方 -b的...(1/2)选择题 当x不等于负的b分之5时 ,(-bx -5 ) 分之(a +x ) =2成立 ,则a的平方 -b的平方等于 A 已知,如图在△ABC中,BE、CF分别是AC、AB边上的高,在BE延长线上截取BM=AC,在CF延长线上截取CN=AB...已知,如图在△ABC中,BE、CF分别是AC、AB边上的高,在BE延长线上截取BM=AC,在CF延长线上截取CN=AB求证: “某人偷袭成功”的英语翻译是什么? 怎样用列举法求双胞胎生两男、两女、一男一女的概率各是多少? 农民工回流是什么意思 罗尔定理成立的条件罗尔定理的条件之一是在区间上存在两个相等的函数值点,但这两个相等的函数值点必须是区间的端点吗? 3男2女 上台抽奖 随机抽两个人 列举所有的基本事件 如图在△ABC中,BE、CF分别是AC、AB边上的高,在BE延长线上截取BM=AC,在CF延长线上截取CN=AB,试判断AB,AC的关系,并说明理由 表达想念某人,做其他事心不在焉的诗句 g(x)=3x^2-bx+b>=0在[-2,1]上恒成立求b的取值范围,计算过程详解 在△ABC中,BE,CF分别是AC,AB边上的高,且交于点O,在BE的延长线上截取BM=AC,在CF的延长线上截取CN=AB.求证:(1)AM=AN(2)AM⊥AN因为在学全等三角形尽量用那个知识进行回答谢谢_(:3」∠)_ 有谁能够将C#类中的get 和set 函数的具体用法说透一点呀?我在C#的属性中使用了get 和set 函数,但是我看不出它的具体作用体现在哪!谁能将它说得清楚一点啊! g(x)=3x^2-bx+b>=0在[-2,1]上恒成立求b的取值范围, 一道物理题``姐姐哥哥帮忙``在爷爷的生日宴上,爸爸拿出一个酒杯,并斟上一杯递给爷爷,爷爷端起酒杯,惊喜的看到杯中有一幅清晰的长寿图,爷爷干了这杯酒,再看的时候发现长寿图不翼而飞了 C#语法的问题 get set的用法public class Users { private int _userid; private string _username; private string _userpwd; public int UserId { get { return this._userid; } set { this._userid = value; } } public string UserName { get { return this 什么是生活日记寒假写生活日记,却不知写什么.Help me! 寒冬时节的早晨,汽车司机发现车窗上有“哈气”于是就打开暖气 很快除“哈气”.夏天,下过雨后,车后面的车窗也有“哈气” 打开空调制冷,很快也把“哈气”除去 这是什么原因 关于C#中get:和set;用法在类中定义属性public string name{get;set;}和private string name;public string Name{get { return name; }set { name= value; }}有什么区别.感觉都是封装字段. 要几篇生活日记 P.112(8)物理题 姐姐哥哥们,state whether the following statements are correct or not.(a)plastic,wood and glass are good insulators because they lack free electrons.(b)separetion between molecules in a gas is greater than that in a solid. 请问现在月球发现了水分的话,是否就能居住呢? 生活日记结尾怎么写马上就要 悬赏30分,求一道物理题,姐姐哥哥们,在用电流表测量某段电路中的电流时,若选用0~0.6A量程,测得电流植为0.2A.若选用0~3A量程,测得电流植为0.18A,那么该电路中的电流大小应该选取?我不只需要一 若即若离的爱我遇到了一个她,我发现我喜欢她,爱她.可是我们若即若离的,让我感觉到不安,我害怕失去她,又总是有可能失去的感觉.我的神啊,救救我吧,人生得李雪此女,别无它求.我不要,更不 来两篇生活日记字数300左右 可以抒情讨论 请各位姐姐哥哥帮我解一下5、 6、题 “全月应纳税所得金额”指全月总收入减2000元后的金额.项老师上月交个人所得税90元,算老师上月收入级别 全月应纳税所得金额 税率1 不超过500元部分 5%2 超过500元到2000元部分 10%3 超过200 折线统计图不但可以表示( ),而且( ). 关于静电力的计算A,B小球分别带电荷9Q和-3Q,固定在相距L的位置,现将一个电荷量为Q的小球C放在什么位置上它的静电力为0?想问一下具体的思路,具体的答案无关紧要…… 希望大家可以推荐几本关有哲学的书!想有一天去夏威夷旅游 不知道出国需要什么手续和条件 还有应该注意什么? ∫x/(4+x)^0.5 dx如题! 静电力计算真空中,两个相同的金属小球所带电荷量分别是+3乘十的负8次方,-5乘十的负8次方,相距R时 静电引力是0.3N,现将两球接触后再置于原来位置时,他们之间的静电力变为多少,是引力还是 已知W1(t0)=W2(t0),W1(t0-△t)>W2(t0-△t),求当自变量的变化由t0-△t到t0时,W甲和W乙谁大(W1属于W甲,W2属于W乙) ∫((X+5)^4)dx 不定积分 在Rt△ABC中,∠ACB=90°,∠BAC=60°,DE垂直平分BC,垂足为D,交AB于点E,又点F在DE的延长线上,且AF=CE,求证:四边形ACEF是菱形 变化率的数学问题有一个等边三角形,边长为20厘米.其顶点每秒向对边的中点以1.5厘米/秒的速度靠近,假设其保持为等边三角形.当三角形消失时,求其消失时刻面积的变化率.谢谢~ ∫(x^5+x^4-8)/x^3-x dx求不定积分具体过程 在Rt△ABC中,∠ACB=90°,∠BAC=60°,DE垂直平分BC,垂足为D,交AB于点E.又点F在DE的延长线上,且AF=CE.求证:四边形ACEF是菱形. 数学,瞬时变化率是什么? 英语. 在Rt△ABC中,∠ACB=90°,∠BAC=60°,ED垂直平分BC,垂足为D,交AB于点E,在DE的延长线上取一点F,使AF=CE.求证:四边形ACEF是菱形 数学的瞬时变化率怎么计算? 25.谁能帮我全部 如图,在RT△ABC中,∠ACB=90°,∠BAC=60°,D,E分别是BC,BA的中点,点F在DE的延长线上,且AF=CE.求证:四边形ACEF是菱形 若(x-2)(x+a)=(x方+bx+6),则a.b各等于多少 设函数f(x)=ax+4/x(x>0),a∈正 R (1)当a=2时,用函数单调性定义求f(x)的单调递减区间 HDU ACM编程2000题..刚学的C语言,编程方面还不是很好,2000题正好是作业程序如下#includeint main(void){\x05char a,b,c,t;\x05while(scanf("%c%c%c",&a,&b,&c)!=EOF);\x05{\x05\x05\x05if(a>b)t=a,a=b,b=t;\x05if(a>c)t=a,a=c,c=t;\x05if(b> 已知x=-1时,a x的三次方加 bx等于1成立,那么x=1时,a x的三次方加 bx-3等于多少? 设函数f(x)=x-2/x-1 1.用定义证明函数f(x)在区间(1,正无穷)上是单调递减函数2.若f(t2-t+2)-2<0,求实数t的取值范围.(根据函数单调性来解答)重点是第二问! 掘金比特币:从虚拟走进现实 上演\"58同城纽交所成功上市 分类信息第一中国高层释楼市调控信号 长效机制或加中国水土流失面积占国土面积30.7%“最牛违建”预计年底前拆完 拆除后将长沙4航班遭“诈弹”威胁 威胁电话系中国载人空间站名叫天宫 核心舱命名为财政部:压缩各地公共财政预算结余结转社保缴纳新规今实施 员工入职30天内日本民主党报出现印刷错误出洋相 党员日本防相:警戒中国舰机无问题 不理解巴基斯坦总理会晤英首相 称与塔利班和中国100大最佳市政府出炉 浙江9个新书称奥巴马难招架前总统克林顿 怕长2013年日本人气商品排行 半泽直树日本防相:警戒中国舰机无问题 不理解联合国首次主动攻击非洲叛军 或抛弃被日本严防文物流向海外 追查76件文物日媒披露日本或早已成为美情报机构窃听日本政府逾2成地震复兴预算未用 被指新加坡女子因将房屋租给非法入境者涉嫌我如何戒掉了前任?3D打印产汽车!车价降50%不是梦!541名脑力运动选手江苏昆山角逐中国河北多地空气质量指数爆表 九市高速站王临乙伉俪雕塑展亮相 曾创作人民英雄太行山高速全线开工 全长680km连售电侧市场放开 三类售电主体可从事售这枚喵星人的一身豹纹也是帅飞了!当喵星人调成震动模式后...11月30日午后操作方案策略,及盯盘天气这么冷,好想和你喝一杯 。无知少女竟为了男子的花言巧语 盗了老日本懒人如何应对冬天,真是太会享受了日本懒人如何应对冬天,真是太会享受了超强风暴袭击英国 多地发布暴雨暴雪及国办:从源头避免各类“奇葩证明”“循第七届中国肺癌南北高峰论坛在京召开怎样才是真正的捉牛股技巧?三大秘诀告通知:最后一杀还是第三轮股灾来袭? 日本这些地方的冬天绝对是上帝打翻的调血帽前队友+隔2人暴力补扣 黑姚与旧
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘