bitr函数的用法_average函数怎么用

bitr函数的用法_average函数怎么用BitBlt函数用法  2010-03-0510:25:51|  分类: VC学习|举报|字号 订阅      下载LOFTER我的照片书  |(一)BOOLBitBlt(intx,inty,intnWidth,intnHe

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

BitBlt函数用法  

2010-03-05 10:25:51|  分类: VC学习|举报|字号 订阅

(一)

BOOL BitBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop );

返回值:函数成功,返回非零值,否则为0。

参数: x 指定目标矩形左上角的逻辑x坐标。

y 指定目标矩形左上角的逻辑y坐标。

nWidth 指定目标矩形和源位图的宽度(逻辑单位)。

nHeight 指定目标矩形和源位图的高度(逻辑单位)。

pSrcDC 指向CDC对象的指针,标识待拷贝位图的设备上下文。假如dwRop指定不包括源的光栅操作,则它必须为NULL。

xSrc 指定源位图左上角的逻辑X坐标。

ySrc 指定源位图左上角的逻辑Y坐标。

dwRop 指定要执行的光栅操作。光栅操作代码定义GDC如何合并输出操作中的颜色,包括当前画刷、可能的源位图和目标位图。

下面对dwRop列出光栅操作代码及其描述:

BLACKNESS 所有输出变黑。

DSTINVERT 反转目标位图。

MERGECOPY 使用布尔AND操作符合并特征与源位图。

MERGEPAINT 使用布尔OR操作符合并特征与源位图。

NOTSRCCOPY 拷贝反转源位图到目标。

NOTSRCERASE 反转使用布尔OR操作符合并源和目标位图的结果。

PATCOPY 拷贝特征到目标位图。

PATINVERT 使用布尔XOR操作符合并目标位图和特征。

PATPAINT 使用布尔OR操作符合并反转源位图和特征。用布尔OR操作符合并这项操作结果与目标位图。

SRCAND 使用布尔AND操作符合并目标像素和源位图。

SRCCOPY 拷贝源位图到目标位图。

SRCERASE 反转目标位图并用布尔AND操作符合并这个结果和源位图。

SRCINVERT 使用布尔XOR操作符合并目标像素和源位图。

SRCPAINT 使用布尔OR操作符合并目标像素和源位图。

WHITENESS 所有输出变白。

有关光栅操作代码的完整列表,请参阅联机文档“Win32 SDK程序员参考”附录节中的“关于光栅操作代码”。

说明:

从源设备上下文拷贝位图到这个当前设备上下文。

应用可以在字节边界上对齐窗口或客户区域,保证BitBlt操作发生在以字节对齐的矩形上(登记窗口类时设置设备CS_BYTEALLGNWINDOW或CS_BYTEALIGHCLIENT标记)。

在字节对齐矩形上的BitBlt操作比未经字节对齐的矩形上的BitBlt操作快许多。假如想对自己的设备上下文指定字节对齐类风格,必须登记窗口类而不要依靠Microsoft基本类。可使用全局函数AfxRegisterWndClass。

一旦使用目标设备上下文和使用源设备上下文,GDI变形nWidth和nHeight。假如结果延伸不匹配,必要时GDI使用Windows StretchBlt函数压缩或拉伸源位图。

假如目标、源和特征位图颜色格式不同,BitBlt转换源和特征位图以匹配目标。转换中使用目标位图的前景和背景色。

BitBlt函数把单色位图转换为彩色时,它设置白色(1)为背景色,黑色(0)作为前景色。使用目标设备上下文的背景和前景色。要把彩色转换为单色,BitBlt把与背景色匹配的像素设置为白色,其余所有像素设置为黑色。在从彩色到单色的转换中,BitBlt使用彩色设备上下文的前景和背景色。

注重,并非所有的设备上下文都支持BitBlt。为检查给定设备上下文是否支持BitBlt,使用GetDeviceCaps成员函数并指定RASTERCAPS索引。

网友回复: CDC::BitBlt

MFC里面的,GDI第一个是目的DC,MFC里面的目的DC是….p,例如(p-> bitblt(…))

网友回复: pDC-> BitBlt(0, 0, rect.right, rect.bottom, &dc, 0, 0, SRCCOPY);

一般里面的参数用的不是很多,重要的就这几个.自己看看用.

网友回复: 给个例子看看吧:

void CDianChangView::OnDraw(CDC* pDC)

{

CDianChangDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

//显示欢迎界面

CBitmap bitmap;

bitmap.LoadBitmap(IDB_BITMAP_PIC);

BITMAP bmp;

bitmap.GetBitmap(&bmp);

CDC pCompatableDC;

pCompatableDC.CreateCompatibleDC(pDC);

pCompatableDC.SelectObject(&bitmap);

CRect rect;

GetClientRect(&rect);//选定绘图区域

pDC-> StretchBlt(0,0,rect.Width(),rect.Height(),

&pCompatableDC,0,0,bmp.bmWidth,

bmp.bmHeight,SRCCOPY);

}

 

 

实例二:

void MYBITMAP::Show(int x,int y)
{

 xpos=x;
 ypos=y;
 SelectObject(hdcsrc,hBm);
 BitBlt(hdcdest,xpos,ypos,width,height,hdcsrc,0,0,SRCCOPY); 
}

void MYBITMAP::ShowCenter(int y)
{

 xpos=(screenwidth-width)/2;
 ypos=y;

 SelectObject(hdcsrc,hBm);
 BitBlt(hdcdest,xpos,ypos,width,height,hdcsrc,0,0,SRCCOPY); 
}

void MYBITMAP::ShowLoop(int left,int top,int right,int bottom,int iframe)
{

 int i,j;

 SelectObject(hdcsrc,hBm);
 for(j=top;j<bottom;j+=height)
 {

  for(i=left;i<right;i+=width)
  {

   BitBlt(hdcdest,i,j,width,height,hdcsrc,iframe*width,0,SRCCOPY); 
  }
    //  BitBlt(hdcdest,,i,j,width,height,hdcsrc,iframe*width,0,SRCCOPY);
 }
}

void MYBITMAP::ShowNoBack(int x,int y,int iFrame)
{

 xpos=x;
 ypos=y;
 SelectObject(hdcsrc,hBm);
 BitBlt(hdcdest,xpos,ypos,width,height/2,hdcsrc,iFrame*width,height/2,SRCAND); 
 BitBlt(hdcdest,xpos,ypos,width,height/2,hdcsrc,iFrame*width,0,SRCPAINT);  
}

 

(二)

在VC中显示位图常用取BitBlt()方法,它是将一幅位图从一个设备场景复制到另一个。源和目标DC相互间必须兼容。
今天要将一些位图显示到窗口中,所以学习了一下。
我已经将要用的位图导入到工程资源中,所以我可以用:
        CBitmap cbmp;
        cbmp.LoadBitmap(IDB_BMP1);
这样得到一个CBitmap对象。
然后:
        BITMAP bitmap;
        cbmp.GetBitmap(&bitmap);
这样得到一个BITMAP对象,之所以要得到此对象是因为从其中可以得到位图的大小数据。
然后计算得到要在什么位置显示此位图(可以放在一个CRect rect;对象中)。

然后显示此位图,这是最重要的一步:
         CDC dcMemory;
         dcMemory.CreateCompatibleDC(pDC);
         hOldBitmap = dcMemory.SelectObject(&cbmp);
          pDC->BitBlt(rect.left,
                             rect.top,
                             bitmap.bmWidth,
                             bitmap.bmHeight,
                             &dcMemory,
                             0,0,
                             SRCCOPY);
其中pDC是一个CDC*,是将要在其中显示位图的设备环境。

这样位图就已经显示出来了,但是还要释放资源:
        cbmp.DeleteObject();
        dcMemory.SelectObject(hOldBitmap);
        dcMemory.DeleteDC();
其中,要将临时设备环境选择入初始时位图,否则将不能正确释放!!

总结:
要在一个设备环境中显示位图,不能直接在上面“画”(目前我是我么觉得的),需要创建一个与之相兼容的新设备环境然后将位图选择入些新设备环境,然后再从些新设备环境中拷备位图以显示到正确的设备环境中。而选入这个动作相当与已经将位图“画在了临时设备环境中”(实际上并没有画,否则就可以直接选入要画图的CDC了),而且选入后位图在临时设备环境中的位置是左上角

BitBlt怎么转换一个单色位图到彩色位图,彩色位图怎么转换为单色位图的问题?

 When   the   BitBlt   function   converts   a   monochrome   bitmap   to   color,   it   sets   white   bits   (1)   to   the   background   color   and   black   bits   (0)   to   the   foreground   color.   The   foreground   and   background   colors   of   the   destination   device   context   are   used.   To   convert   color   to   monochrome,   BitBlt   sets   pixels   that   match   the   background   color   to   white   and   sets   all   other   pixels   to   black.   BitBlt   uses   the   foreground   and   background   colors   of   the   color   device   context   to   convert   from   color   to   monochrome.   
    
  在BitBlt的时候,一个单色的位图把是1的地方设置为背景色,而0为前景色,而转换彩色位图到单色位图的时候,BitBlt设置与背景色相同的象素为白色,而其他的颜色为黑色.BitBlt用背景色和前景色来处理单色位图与彩色位图间的问题.(
CDC::BitBlt的说明上,作为API的BltBit的文档上反而没有这段说明)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/180401.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 硬件接口之Camera DVP「建议收藏」

    硬件接口之Camera DVP「建议收藏」Camera的并口传输方式很多地方叫做dvp接口,但是并没有统一的标准。MIPI接口比DVP的接口信号线少,由于是低压差分信号,产生的干扰小,抗干扰能力也强。最重要的是DVP接口在信号完整性方面受限制,速率也受限制。500W还可以勉强用DVP,800W及以上都采用MIPI接口。1.DVP的信号脚名称及作用:PCLK:pixelclock,像素时钟,每个时钟对应一个像素数据;HSYNC:horizonalsynchronization,行同步信号VSYNC:verticalsynchro

    2022年5月2日
    71
  • spring整合log4j_spring整合log4j

    spring整合log4j_spring整合log4j常用日志框架log4j、log4j2(log4j的升级版,最常用的)、logback(spring boot默认)、Jboss-logging…等slf4 是日志接口规范,代码对接slf4,实现和具体日志框架解耦,无需修改编码即可切换日志框架。修改pom依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-st

    2022年8月9日
    8
  • SCI论文投稿信(Cover Letter)的写法及模版

    SCI论文投稿信(Cover Letter)的写法及模版一、写法投稿信(CoverLetter)应该简述所投稿件的核心内容、主要发现和意义,拟投期刊,对稿件处理有无特殊要求等(如“nottoreview”list)。另外,请附上主要作者的中文姓名、通讯地址、电话、传真和e-mail地址。此外有的杂志要求推荐几位审稿人及其联系方式。以及谁已经阅读过该文(当然是牛人)。一般来说,杂志通常要求说明你论文研究的意义,以及与这个杂志的相关性,另外还有…

    2022年5月8日
    129
  • UIP协议栈移植到u-boot详解「建议收藏」

    UIP协议栈移植到u-boot详解「建议收藏」UIP协议栈移植到u-boot详解        Author:杨正 date:2014.11.5 Email:y2012ww@gmail.com QQ:12097587561、uip简介      Uip网络是一个简单好用的嵌入式协议栈,易于移植且消耗的内存空间较少,应用于很多嵌入式产品。uIP协议栈去掉了完整的TCP/IP系统中不常用的功能,简化了通讯流程,只保留

    2022年10月20日
    4
  • ICMP协议/IGMP协议详解

    ICMP协议/IGMP协议详解网际控制报文协议ICMP功能:ICMP允许主机或者路由器报告差多情况和提供有关异常情况的报告,它是网络层的协议,ICMP报文装在IP数据报中,作为其中的数据部分。ICMP报文的种类ICMP差错报文终点不可达源点抑制超时参数问题改变路由(重定向)ICMP询问报文回送请求和回答时间戳请求和回答ICMP应用举例ping(PacketInternetGroper)命令:该命令利用发送分

    2025年11月17日
    4
  • httprunner3源码解读(3)client.py

    httprunner3源码解读(3)client.py源码目录结构ApiResponse这个类没啥好说的classApiResponse(Response):"""继承了requests模块中的Response类

    2022年7月31日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号