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)
上一篇 2022年10月19日 上午7:46
下一篇 2022年10月19日 上午7:46


相关推荐

  • sap安装配置_sapgui730安装指南

    sap安装配置_sapgui730安装指南一.下载和安装    WEBIDE是免安装的,下载完解压就行。       下载地址  Developerguid在线文档  在线文档打开会比较慢,可以下载下来观看。二.配置ABAP链接 在IDE的解压文件的配置文件夹中新建文件ER1(没有后缀名)  编辑新建文件添加如下内容:  Description=

    2022年10月18日
    6
  • CSDN博文写作规范文档

    CSDN博文写作规范文档大家在 CSDN 写博客 一定有机会碰到 发文助手 给你的提示 提醒你注意 创作规范 了解规则 等等 这篇文章就是从 CSDN 平台运营的角度 谈谈怎么写一个好的 CSDN 技术博客 我们也在看用户的评论 不断提高我们的提示信息 让这些信息能更友好 更有效

    2026年3月19日
    1
  • java 进度条_进度条Java

    java 进度条_进度条Java你必须使用线程 设计一个实现 Runnable 接口的类 它将更新这样的值 classProgres lang Runnable Progressbart privatejavax swing JProgressBar null Progressb

    2026年1月31日
    2
  • js走马灯

    js走马灯

    2021年8月7日
    59
  • linux中安装pycharm_ubuntu激活成功教程pycharm

    linux中安装pycharm_ubuntu激活成功教程pycharm前言由于学习需要,准备开始在linux环境下使用python。一开始是使用了vim作为编译器的,我承认vim确实很简洁,然而对于我这种新手来说确实是很低效,一开始用vim写代码真的是让我重新体会了一遍VC手撸C语言的感觉,而且面对了还是tf这种函数巨多的库。因此还是转去用了pycharm,可能我注定和大神无缘吧,逼格都提升不到。这篇文章主要介绍linux下的安装、环境配置和学生优惠。安装…

    2022年8月28日
    6
  • java gettickcount_linux上的GetTickCount函数

    java gettickcount_linux上的GetTickCount函数include 返回自系统开机以来的毫秒数 tick unsignedlong structtimesp clock gettime CLOCK MONOTONIC amp ts return ts tv sec 1000 ts tv nsec intmain structtimesp

    2026年3月16日
    1

发表回复

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

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