bitblt(关于BitBlt函数)
本文目录
关于BitBlt函数
这不是颜色,而是bitblt函数的一个参数,不同的值代表bitblt的不同方式,表示源象素和目标象素如何进行组合操作才得到最后的目标象素。不必追究具体的数值。
&HEE0086 把他分解为 &h ee 00 86 四部分然后看第一的 &h 代表这个是16进制的。。。。二。 ee 代表一个色这个为蓝色的 0-255。。。。三。 00 代表一个色这个为绿色的 0-255。。。。四。 86 代表一个色这个为红色的 0-255三个组合起来就是一种颜色 换句话说 只要把三种色都加起来就是你的颜色了 颜色的深浅,什么色等都是修改后面三个的,都代表什么颜色就要看你自己怎么改了~~
bitblt函数怎么用啊
bitblt: 该函数对指定的源设备环境区域中的像素进行位块(bit_block)转换,以传送到目标设备环境。 用法参数: hDestDC:指向目标设备环境的句柄。 x:指定目标矩形区域左上角的X轴逻辑坐标。 y:指定目标矩形区域左上角的Y轴逻辑坐标。 nWidth:指定源在目标矩形区域的逻辑宽度。 nHeight:指定源在目标矩形区域的逻辑高度。 hSrcDC:指向源设备环境的句柄。 xSrc:指定源矩形区域左上角的X轴逻辑坐标。 ySrc:指定源矩形区域左上角的Y轴逻辑坐标。 dwRop:指定光栅操作代码。这些代码将定义源矩形区域的颜色数据,如何与目标矩形区域的颜色数据组合以完成最后的颜色。 下面列出了一些常见的光栅操作代码: BLACKNESS:表示使用与物理调色板的索引0相关的色彩来填充目标矩形区域,(对缺省的物理调色板而言,该颜色为黑色)。 DSTINVERT:表示使目标矩形区域颜色取反。 MERGECOPY:表示使用布尔型的AND(与)操作符将源矩形区域的颜色与特定模式组合一起。 MERGEPAINT:通过使用布尔型的OR(或)操作符将反向的源矩形区域的颜色与目标矩形区域的颜色合并。 NOTSRCCOPY:将源矩形区域颜色取反,于拷贝到目标矩形区域。 NOTSRCERASE:使用布尔类型的OR(或)操作符组合源和目标矩形区域的颜色值,然后将合成的颜色取反。 PATCOPY:将特定的模式拷贝到目标位图上。 PATPAINT:通过使用布尔OR(或)操作符将源矩形区域取反后的颜色值与特定模式的颜色合并。然后使用OR(或)操作符将该操作的结果与目标矩形区域内的颜色合并。 PATINVERT:通过使用XOR(异或)操作符将源和目标矩形区域内的颜色合并。 SRCAND:通过使用AND(与)操作符来将源和目标矩形区域内的颜色合并。 SRCCOPY:将源矩形区域直接拷贝到目标矩形区域。 SRCERASE:通过使用AND(与)操作符将目标矩形区域颜色取反后与源矩形区域的颜色值合并。 SRCINVERT:通过使用布尔型的XOR(异或)操作符将源和目标矩形区域的颜色合并。 SRCPAINT:通过使用布尔型的OR(或)操作符将源和目标矩形区域的颜色合并。 WHITENESS:使用与物理调色板中索引1有关的颜色填充目标矩形区域。(对于缺省物理调色板来说,这个颜色就是白色)。 dwRop Values From wingdi.h: #define BLACKNESS 0x42 #define DSTINVERT 0x550009 #define MERGECOPY 0xC000CA #define MERGEPAINT 0xBB0226 #define NOTSRCCOPY 0x330008 #define NOTSRCERASE 0x1100A6 #define PATCOPY 0xF00021 #define PATINVERT 0x5A0049 #define PATPAINT 0xFB0A09 #define SRCAND 0x8800C6 #define SRCCOPY 0xCC0020 #define SRCERASE 0x440328 #define SRCINVERT 0x660046 #define SRCPAINT 0xEE0086 #define WHITENESS 0xFF0062
vc中如何用bitblt函数将内存位图分块
关于Bitblt函数,从内存中拷贝到内存中,下面的代码可以给你参考: // 取得窗口客户区域大小 CRect WndRect ; this-》GetWindowRect ( &WndRect ) ; this-》ScreenToClient ( &WndRect ) ; CClientDC cdc(this) ; CDC mdc, TempDc ; // 内存DC BITMAP BmpInfo ; CBitmap ClientBmp, *pOldBmp ; // 创建与设备DC兼容的内存DC mdc.CreateCompatibleDC ( &cdc ) ; TempDc.CreateCompatibleDC ( &cdc ) ; // 创建与设备DC兼容的位图对象 ClientBmp.CreateCompatibleBitmap ( &cdc, WndRect.right, WndRect.bottom ) ; mdc.SelectObject ( &ClientBmp ) ; // 依次把位图贴到内存DC for ( int i = 0; i 《= 8; i++ ) { TempDc.SelectObject ( &this-》MyBmp.bmp ) ; this-》MyBmp.bmp.GetBitmap ( &BmpInfo ) ; if ( i == 0 ) mdc.BitBlt (0, 0, WndRect.Width(), WndRect.Height(), &TempDc, 0, 0, SRCCOPY ) ; else mdc.TransparentBlt ( this-》MyBmp.rect.left, \ this-》MyBmp.rect.top, BmpInfo.bmWidth, BmpInfo.bmHeight, \ &TempDc, 0, 0, BmpInfo.bmWidth, BmpInfo.bmHeight, RGB(255,255,255) ) ; } // 把内存DC贴到设备DC上 cdc.BitBlt ( 0, 0, WndRect.right, WndRect.bottom, &mdc, 0, 0, SRCCOPY ) ; // 环境清理 ClientBmp.DeleteObject () ; mdc.DeleteDC () ;
vb 函数BitBlt的参数是那些
声明:Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, _ ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, _ ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, _ ByVal ySrc As Long, ByVal dwRop As Long) As Long 【参数表】 hDestDC -------- Long,目标设备场景 x,y ------------ Long,对目标DC中目标矩形左上角位置进行描述的那个点。用目标DC的逻辑坐标表示 nWidth,nHeight - Long,欲传输图象的宽度和高度 hSrcDC --------- Long,源设备场景。如光栅运算未指定源,则应设为0 xSrc,ySrc ------ Long,对源DC中源矩形左上角位置进行描述的那个点。用源DC的逻辑坐标表示 dwRop ---------- Long,传输过程要执行的光栅运算
请教一下mfc中bitblt各个参数的具体含义
bitblt()用法 在VC中显示位图常用取BitBlt()方法,它是将一幅位图从一个设备场景复制到另一个。源和目标DC相互间必须兼容。虽然此方法的功能是这样的,但是我一直没有理解网上一些例子代码,不知道其用到的各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();其中,要将临时设备环境选择入初始时位图,否则将不能正确释放!!Bitblt作用将某一内存块的数据传送到另一内存块,前一内存块被称为"源",后一内存块被称为"目标"图象程序开发者使用Blit的函数在内存中将某页面上的一幅位图经过一定的变换转移到另一个页面上原形说明:Declare Function BitBlt Lib "gdi32" Alias "BitBlt"(ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As LonghDestDC As Long, //目标设备环境的句柄x As Long, //目标设备环境的矩形区域的左上角的x坐标y As Long, //目标设备环境的矩形区域的左上角的y坐标nWidth As Long, //目标设备环境的矩形区域的宽度值nHeight As Long, //目标设备环境的矩形区域的高度值hSrcDC As Long, //源设备环境的句柄xSrc As Long, //源设备环境的矩形区域的左上角的x坐标ySrc As Long, //源设备环境的矩形区域的左上角的y坐标dwRop As Long, //光栅操作符dwRop参数是光栅操作代码(Rop),它是指源位图与目标位图以及图案刷的颜色值进行布尔运算的方式,以下列出了常用的光栅操作码及含义BLACKNESS 用黑色填充目标矩形区域.DSTINVERT 将目标矩形图象进行反相. MERGECOPY 将源矩形图象与指定的图案刷(Pattern)进行布尔"与"运算. MERGEPAINT 将源矩形图形经过反相后,与目标矩形图象进行布尔"或"运算.NOTSRCCOPY 将源矩形图象经过反相后,复制到目标矩形上.NOTSRCERASE 先将源矩形图象与目标矩形图象进行布尔"或"运算,然后再将得图象进行反相.PATCOPY 将指定的图案刷复制到目标矩形上.PATINVERT 将指定的图案刷与目标矩形图象进行布尔"异或"运算.PATPAINT 先将源矩形图象进行反相,与指定的图案刷进行布尔"或"运算,再与目标矩形图象进行布尔"或"运算SRCAND 将源矩形图象与目标矩形图象进行布尔"与"运算.SRCCOPY 将源矩形图象直接复制到目标矩形上.SRCERASE 将目标矩形图象进行反相,再与源矩形图象进行布尔"与"运算.SRCINVERT 将源矩形图象与目标矩形图象进行布尔"异或"运算.SRCPAINT 将源矩形图象与目标矩形图象进行布尔"或"运算.WHITENESS 用白色填充目标矩形区域
bitblt显示不出文字
lz 你好
因为BitBlt函数是在位图上操作的,因此你应该先创建一个内存兼容位图hBitmap,然后将其选入内存DC中,再才能在内存DC中进行画图操作。
如果不创建,内存DC中就没有位图可供BitBlt操作,因此无法贴出你要显示的字符串
以下是修改后的完整代码:
#include《windows.h》LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int nCmdShow){TCHAR szAppName =TEXT("内存DC测试");HWND hwnd;MSG msg;WNDCLASS wndclass;wndclass.style= CS_HREDRAW|CS_VREDRAW;wndclass.lpfnWndProc= WndProc;wndclass.cbClsExtra = 0;wndclass.cbWndExtra= 0;wndclass.hbrBackground= (HBRUSH)GetStockObject(WHITE_BRUSH);wndclass.hCursor= LoadCursor(NULL,IDC_ARROW);wndclass.hIcon= LoadIcon(NULL,IDI_APPLICATION);wndclass.hInstance= hInstance;wndclass.lpszClassName= szAppName;wndclass.lpszMenuName= NULL;// 注册窗口类if(!RegisterClass(&wndclass)){MessageBox(NULL,TEXT("This program requires Windows NT!"),TEXT("Error"),MB_ICONERROR);return 0;}hwnd = CreateWindow(szAppName,szAppName,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);ShowWindow(hwnd, nCmdShow);//UpdateWindow(hwnd);while(GetMessage(&msg, NULL, 0, 0)){TranslateMessage(&msg);DispatchMessage(&msg);}return msg.wParam;}LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){static SIZE sClient;//保存窗口客户区大小HDChdc, memDC;HBITMAPhBitmap;PAINTSTRUCT ps;switch(message){//在WM_SIZA消息中获取窗口客户区大小case WM_SIZE:sClient.cx = LOWORD(lParam);//客户区宽度sClient.cy = HIWORD(lParam);//客户区高度return 0;case WM_PAINT:hdc = BeginPaint(hwnd, &ps);memDC = CreateCompatibleDC(hdc); //创建内存DC//创建内存位图(必须在内存位图中进行画图操作)hBitmap = CreateCompatibleBitmap(hdc, sClient.cx, sClient.cy);//将内存位图hBitmap选如内存DC中SelectObject(memDC, hBitmap);TextOut(memDC, 0, 0, TEXT("Hello World!"), lstrlen(TEXT("Hello World!")));//BitBlt必须在有位图的DC上操作,现在可以显示了BitBlt(hdc, 0, 0, sClient.cx, sClient.cy, memDC, 0, 0, SRCCOPY);DeleteObject(hBitmap);//回收hBitmap所占的内存DeleteDC(memDC);EndPaint(hwnd, &ps);break;case WM_DESTROY:PostQuitMessage(0);break;}return DefWindowProc(hwnd, message, wParam, lParam);}
现在能显示了
希望能帮助你哈
更多文章:
全国新闻媒体发稿平台(网上新闻发稿渠道有哪些 发布软文平台哪个好)
2024年11月2日 10:00
我儿子被中山大学图书情报与档案管理专业录取,这个专业前景怎么样?如何编写程序实现图书管理系统的费用查询功能
2023年11月19日 08:25
windowsxp系统安装(windows xp 的系统怎样安装)
2024年7月4日 06:06
曾经的国产单机经典之作,当年没有花里胡哨,质量是最靠谱的保障?国产好玩单机游戏有哪些
2024年7月12日 07:51
camera raw官网下载(怎么从Adobe官网下载Camera Raw)
2024年9月3日 09:25
大神F1极速版和大神F1 Plus哪个好 大神F1 Plus与极速版区别?大神f1像素密度是多少
2024年7月27日 16:25
任务栏输入法图标不见了(电脑右下角任务栏里面的输入法图标不见了)
2024年4月13日 21:40