社区
图形处理/算法
帖子详情
关于位图的几个问题,请各位指教
SKJG
2003-09-29 07:59:21
1.如何把一个CBitmap内的位图复制到剪切板
2.如何快速的,无闪烁的把CBitmap内的位图显示在CScrollView上
3.我用StretchBlt放缩显示图片时,显示的结果很差,如何解决。
请各位赐教!
...全文
39
14
打赏
收藏
关于位图的几个问题,请各位指教
1.如何把一个CBitmap内的位图复制到剪切板 2.如何快速的,无闪烁的把CBitmap内的位图显示在CScrollView上 3.我用StretchBlt放缩显示图片时,显示的结果很差,如何解决。 请各位赐教!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
eejeff
2004-03-26
打赏
举报
回复
你应该把你的BMP数据复制一份
然后把复制的数据放到剪切板
romanticist
2003-10-14
打赏
举报
回复
HBITMAP CopyScreenToBitmap(LPRECT lpRect)
//lpRect 代表选定区域
{
HDC hScrDC, hMemDC;
// 屏幕和内存设备描述表
HBITMAP hBitmap, hOldBitmap;
// 位图句柄
int nX, nY, nX2, nY2;
// 选定区域坐标
int nWidth, nHeight;
// 位图宽度和高度
int xScrn, yScrn;
// 屏幕分辨率
// 确保选定区域不为空矩形
if (IsRectEmpty(lpRect))
return NULL;
//为屏幕创建设备描述表
hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL);
//为屏幕设备描述表创建兼容的内存设备描述表
hMemDC = CreateCompatibleDC(hScrDC);
// 获得选定区域坐标
nX = lpRect- >left;
nY = lpRect- >top;
nX2 = lpRect- >right;
nY2 = lpRect- >bottom;
// 获得屏幕分辨率
xScrn = GetDeviceCaps(hScrDC, HORZRES);
yScrn = GetDeviceCaps(hScrDC, VERTRES);
//确保选定区域是可见的
if (nX 〈0)
nX = 0;
if (nY 〈 0)
nY = 0;
if (nX2 > xScrn)
nX2 = xScrn;
if (nY2 > yScrn)
nY2 = yScrn;
nWidth = nX2 - nX;
nHeight = nY2 - nY;
// 创建一个与屏幕设备描述表兼容的位图
hBitmap = CreateCompatibleBitmap
(hScrDC, nWidth, nHeight);
// 把新位图选到内存设备描述表中
hOldBitmap = SelectObject(hMemDC, hBitmap);
// 把屏幕设备描述表拷贝到内存设备描述表中
BitBlt(hMemDC, 0, 0, nWidth, nHeight,
hScrDC, nX, nY, SRCCOPY);
//得到屏幕位图的句柄
hBitmap = SelectObject(hMemDC, hOldBitmap);
//清除
DeleteDC(hScrDC);
DeleteDC(hMemDC);
// 返回位图句柄
return hBitmap;
}
SKJG
2003-10-12
打赏
举报
回复
不至于吧!!!
各位老大,帮帮忙,想想办法呀!!!!
wangzi163
2003-10-11
打赏
举报
回复
显卡,内存有问题?
SKJG
2003-10-11
打赏
举报
回复
"你居然是做日本软件的" 什么意思啊????
HBITMAP 没有问题
我就是用这个handle在CView上画图的
daylight1980
2003-10-10
打赏
举报
回复
根本就没复制到图/
你可以打开画图版粘贴以下就知道了。
不说了,你居然是做日本软件的。
买身求荣啊!!!
mct1025
2003-10-10
打赏
举报
回复
肯定是复制时,HBITMAP 的问题,检查一下代码
SKJG
2003-10-10
打赏
举报
回复
我就是在画图里面粘贴的
结果是一片黑!!!
romanticist
2003-10-03
打赏
举报
回复
22.如何快速的,无闪烁的把CBitmap内的位图显示在CScrollView上
BOOL m_VScroll
BOOL m_HScroll;
int m_nYSrc;
int m_nXSrc;
int m_iHScroll;
int m_iVScroll;
HBITMAP m_hbitmap;
HBITMAP m_hSrcbitmap;
DisplayImage()
{
BITMAP bmp;
GetObject(m_hSrcbitmap,sizeof(BITMAP),&bmp);
int iBMPWidth = bmp.bmWidth;
int iBMPHeight = bmp.bmHeight;
DeleteObject(&bmp);
CDC MemDC;
MemDC.CreateCompatibleDC(NULL);
MemDC.SelectObject(m_hSrcbitmap);
CDC *dc =m_Static_Picture.GetDC();
CDC TempDC;
TempDC.CreateCompatibleDC(NULL);
HBITMAP hmemBMP = CreateCompatibleBitmap ( dc->m_hDC,m_SRCClientRect.Width(),m_SRCClientRect.Height());
TempDC.SelectObject(hmemBMP);
//画像の表示
//表示領域の背景色を白に設定する
TempDC.FillRect(m_SRCClientRect, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));
TempDC.BitBlt(m_nXSrc,m_nYSrc,iBMPWidth,iBMPHeight,&MemDC,m_iHScroll,m_iVScroll,SRCCOPY);
DeleteDC(MemDC);
CDC SaveDC;
SaveDC.CreateCompatibleDC(NULL);
HBITMAP hmemBM = CreateCompatibleBitmap ( dc->m_hDC,m_SRCClientRect.Width(),m_SRCClientRect.Height());
HBITMAP oldBit = (HBITMAP)SaveDC.SelectObject(hmemBM);
SaveDC.BitBlt(0,0,m_SRCClientRect.Width(),m_SRCClientRect.Height(),&TempDC,0,0,SRCCOPY);
if(m_hbitmap != NULL)
DeleteObject(m_hbitmap);
m_hbitmap = (HBITMAP)SaveDC.SelectObject(oldBit);
if(m_hbitmap == NULL)
return -1;
m_Static_Picture.SetBitmap(m_hbitmap);
m_Static_Picture.ReleaseDC(dc);
DeleteObject(hmemBMP);
DeleteDC(TempDC);
DeleteDC(SaveDC);
DeleteObject(oldBit);
return NO_ERR;
}
:OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォルトの処理を呼び出してください
m_iVScroll = GetScrollPos(SB_VERT);
switch(nSBCode)
{
case SB_THUMBTRACK:
m_iVScroll = nPos;
break;
case SB_LINEUP:
m_iVScroll -= 2;
break;
case SB_LINEDOWN:
m_iVScroll += 2;
break;
case SB_PAGEUP:
m_iVScroll -= 4;
break;
case SB_PAGEDOWN:
m_iVScroll += 4;
break;
}
SetScrollPos(SB_VERT, m_iVScroll);
Invalidate();
DisplayImage();
COleControl::OnVScroll(nSBCode, nPos, pScrollBar);
}
OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォルトの処理を呼び出してください
m_iHScroll = GetScrollPos(SB_HORZ);
switch(nSBCode)
{
case SB_THUMBTRACK:
m_iHScroll = nPos;
break;
case SB_LINEUP:
m_iHScroll -= 2;
break;
case SB_LINEDOWN:
m_iHScroll += 2;
break;
case SB_PAGEUP:
m_iHScroll -= 4;
break;
case SB_PAGEDOWN:
m_iHScroll += 4;
break;
}
SetScrollPos(SB_HORZ, m_iHScroll);
DisplayImage();
Invalidate();
COleControl::OnHScroll(nSBCode, nPos, pScrollBar);
}
可以参考一下
romanticist
2003-10-03
打赏
举报
回复
3.我用StretchBlt放缩显示图片时,显示的结果很差,如何解决。
先用CopyImage放缩,然后用BitBlt显示
wangzi163
2003-10-01
打赏
举报
回复
还是用DIB 吧
mct1025
2003-10-01
打赏
举报
回复
复制好像没有问题
你可以用windows的画图程序,粘贴检查一下
取出的时候,使用
CBitmap bmp;
bmp.Attach(GetClipboardData(CF_BITMAP));
SKJG
2003-09-30
打赏
举报
回复
复制位图老是有问题。
复制是没事,
但是粘贴的结果却是黑白图。
我的图形是JPEG格式的,
我用IPicture把他载入内存,
取得位图Handle
这些过程肯定没错
载入的图形可以在通过Handle使用BitBlt在CScrollView中显示出来,
以下是我的复制代码
我不知道错在那里
//m_BMPX,m_BMPY是位图的高度和宽度
//m_pMemDC是载有位图的CDC指针
//m_pMemDC和m_BMPX和m_BMPY肯定没问题,我就是用他们在ScrollView上显示图片的
CBitmap Bitmap;
CDC MemDC;
MemDC.CreateCompatibleDC(GetDC());
Bitmap.CreateCompatibleBitmap(&MemDC,m_BMPX,m_BMPY);
MemDC.SelectObject(&Bitmap);
MemDC.BitBlt(0,0,m_BMPX,m_BMPY,m_pMemDC,0,0,SRCCOPY);
OpenClipboard();
EmptyClipboard();
SetClipboardData (CF_BITMAP, Bitmap.GetSafeHandle() ) ;
CloseClipboard () ;
MemDC.DeleteDC();
Bitmap.Detach();
mct1025
2003-09-29
打赏
举报
回复
1, if ( !OpenClipboard() )
{
AfxMessageBox( "Cannot open the Clipboard" );
return;
}
// Remove the current Clipboard contents
if( !EmptyClipboard() )
{
AfxMessageBox( "Cannot empty the Clipboard" );
return;
}
// Get the currently selected data
// HBITMAP hbmp;
if ( ::SetClipboardData( CF_BITMAP, hbmp ) == NULL )//复制到剪贴板
{
AfxMessageBox( "Unable to set Clipboard data" );
// CloseClipboard();
}
hbmp = (HBITMAP)::GetClipboardData(CF_BITMAP);//取出
// ...
CloseClipboard();
2, CDC dcMemory;
dcMemory.CreateCompatibleDC(pDC);
// Select the bitmap into the in-memory DC
CBitmap* pOldBitmap = dcMemory.SelectObject(&bmp);
SetStretchBltMode
StretchBlt
dcMemory.SelectObject(pOldBitmap);
3,StretchBlt前,加一句dc.SetStretchBltMode(COLORONCOLOR);
Windows游戏编程系列之1:GUI窗口界面编程及游戏入门实战
位图
简介 38 1)在资源中添加
位图
资源 39 2)从资源中加载
位图
: LoadBitmap 39 3)创建一个与当前DC相匹配的DC(内存DC) 39 4)将bitmap放入匹配的DC中:SelectObject 40 5)成像(1:1 比例 ) 40 6)取出
位图
40...
Laya的
位图
字体bitmapFont字体用法
一 效果 二 工具 BMFont (下载地址:http://www.angelcode.com/products/bmfont/) 建议下载第三个,不需要安装,双击打开直接使用 三 准备图片 制作需要的文字,以数字为例: 以这十个数字为例制作
位图
。 切图,每个数字单独切成一个图片。 四 制作
位图
字体 选择Edit -> Ope...
概述:
位图
索引在数据仓库中的作用- Oracle 数据仓库- CNOUG
关于星型模式 在数据仓库的构建中, 如下图所示的星型模式几乎是最常用到的。之所以称之为星型模式,是因为该模式中的E-R图形状如星(感觉这麽说有些怪怪的)。 如图所示,中心是一个大的事实表,周围是一些维表。事实表包含数据仓库的主要信息,每个维表包含该事实表的特定属性。 星型查询是一个事实表和一些维表之间的连接,维表使用主键连接到事实表的外键,维表之间不进行连接。 关于
位图
索引
【C++从青铜到王者】第二十一篇:哈希的应用之
位图
、布隆过滤器
系列文章目录 文章目录系列文章目录前言一、
位图
1.
位图
的概念2.
位图
的面试题3.
位图
的实现4.
位图
的应用二、布隆过滤器1.布隆过滤器的提出2.布隆过滤器的概念3.布隆过滤器的插入3.布隆过滤器的查找4.布隆过滤器的删除5.布隆过滤器的优点和缺点三、海量数据面试题1.哈希切割2.
位图
应用3.布隆过滤器总结 前言 一、
位图
1.
位图
的概念 所谓
位图
,就是用每一位来存放某种状态,适用于海量数据,数据无重复的场景。通常是用来判断某个数据存不存在的。 2.
位图
的面试题 给40亿个不重复的无符号整数,没排过序.
android图片存储优化的心得
在android开发过程中图片的存储优化是非常常见,处理不好,时常会造成图片OOM。接下来分享一下我在开发过程中做的相应的处理,仅供各位参考,如有不足还
请
多多
指教
。 首先我们知道图片在app存在形式无非就是:file、stream流、bitmap! 一、接下来列出
几个
图片OOM的出现情况 1、在一个页面中一次性加载过多的图片 2、加载的图片过大 ...
图形处理/算法
19,468
社区成员
50,698
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章