圖像處理問題:要在一個bmp圖象中按指定大小、位置取出其子圖該如何做? 这个比较简单啊!首先,你应该了解位图的储存格式,也就是bmp文件的文件格式。然后知道x,y坐标的话,在从这个坐标开始拷贝数据块,就可以了,所以你还是先去看看bmp文件格式吧! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 2 hoco:難道沒有簡單的通過DC來達到此功能的方法嗎? 事实上,直接拷贝数据块速度快, BMP 图像的数据格式是很简单的.你可以只从文件中读取制定位置的图像的数据,这是你可以使用一个极大的图像,而不用将整个图像度如内存. 我寫了一段代碼,但截出的CBitmap畫出來去是個黑塊,大家幫忙看看問題在哪里(高手勿笑) CDC * pDC=this->GetDC(); CBitmap srcBmp,tagBmp; srcBmp.LoadBitmap(IDB_PIC); CDC memSrcDC,memTagDC; memSrcDC.CreateCompatibleDC(pDC); CBitmap * pOld=memSrcDC.SelectObject(&srcBmp); memTagDC.CreateCompatibleDC(&memSrcDC); memTagDC.BitBlt(0,0,14,14,&memSrcDC,0,0,SRCCOPY); tagBmp.CreateCompatibleBitmap(&memTagDC,14,14); this->Draw(tagBmp); memSrcDC.SelectObject(pOld); memSrcDC.DeleteDC(); memTagDC.DeleteDC(); this->ReleaseDC(pDC);其中this->Draw(CBitmap&)是我用來畫截出的bmp的,此處不表 错错错。要这样才行:CDC * pDC=this->GetDC();CBitmap srcBmp,tagBmp;srcBmp.LoadBitmap(IDB_PIC);CDC memSrcDC,memTagDC;memSrcDC.CreateCompatibleDC(pDC);CBitmap * pOld=memSrcDC.SelectObject(&srcBmp);tagBmp.CreateCompatibleBitmap(pDC,14,14);// here change memTagDC.CreateCompatibleDC(&memSrcDC);memTagDC.BitBlt(0,0,14,14,&memSrcDC,0,0,SRCCOPY);//tagBmp.CreateCompatibleBitmap(&memTagDC,14,14);this->Draw(tagBmp);memSrcDC.SelectObject(pOld);memSrcDC.DeleteDC();memTagDC.DeleteDC();this->ReleaseDC(pDC); 2 erehw(疯狂CS):不行呀,照你的代碼我截出的仍是一個黑塊,沒有東西。是哪里出錯樂? To :chief 你肯定自己弄错点什么了。仔细看看吧。实在不行,我发一个例子给你。 你看看CDC这个类CDC可以SelectObject( CBitmap * bmp );这样这个CDC的“内容”就是这个图象了。CDC之间可以Bitblt,就是图象的Copy。你明白了吧 高分求VC写的PPPOE拨号程序? 能解释一下stl中map list vector array之间的联系和区别 如何分辨IP和域名 VC 6.0中怎么给主窗体加入背景图片 自动完成VC2005 请问怎么在“打开”和“另存为”对话框中加入文件过滤器? 两个非模态对话框之间如何用自定义消息传递信息? 简单而棘手的问题:MFC中怎样动态创建GroupBox控件呢? VC++6.0...一个莫名的问题 如何Windows得到版本号? 文档中如何通过键盘响应输入汉字. 哪里有nt4 SDK?
CBitmap srcBmp,tagBmp;
srcBmp.LoadBitmap(IDB_PIC);
CDC memSrcDC,memTagDC;
memSrcDC.CreateCompatibleDC(pDC);
CBitmap * pOld=memSrcDC.SelectObject(&srcBmp); memTagDC.CreateCompatibleDC(&memSrcDC);
memTagDC.BitBlt(0,0,14,14,&memSrcDC,0,0,SRCCOPY); tagBmp.CreateCompatibleBitmap(&memTagDC,14,14);
this->Draw(tagBmp); memSrcDC.SelectObject(pOld);
memSrcDC.DeleteDC();
memTagDC.DeleteDC();
this->ReleaseDC(pDC);其中this->Draw(CBitmap&)是我用來畫截出的bmp的,此處不表
要这样才行:
CDC * pDC=this->GetDC();
CBitmap srcBmp,tagBmp;
srcBmp.LoadBitmap(IDB_PIC);
CDC memSrcDC,memTagDC;
memSrcDC.CreateCompatibleDC(pDC);
CBitmap * pOld=memSrcDC.SelectObject(&srcBmp);tagBmp.CreateCompatibleBitmap(pDC,14,14);
// here change
memTagDC.CreateCompatibleDC(&memSrcDC);
memTagDC.BitBlt(0,0,14,14,&memSrcDC,0,0,SRCCOPY);//tagBmp.CreateCompatibleBitmap(&memTagDC,14,14);
this->Draw(tagBmp);memSrcDC.SelectObject(pOld);
memSrcDC.DeleteDC();
memTagDC.DeleteDC();
this->ReleaseDC(pDC);
仔细看看吧。
实在不行,我发一个例子给你。
CDC可以SelectObject( CBitmap * bmp );
这样这个CDC的“内容”就是这个图象了。CDC之间可以Bitblt,就是图象的Copy。你明白了吧