bitblt函数怎么用啊?

bitblt函数怎么用啊?,第1张

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

“Window程序设计”书本上的评论:

__stdcall的为__cdecl的WideCharToMultiByte MultiByteToWideChar

多字节字符集和Unicode:IsTextUnicode有

TCHAR.H _tcslen(wcslen和strlen的)

TCHAR(为wchar_t和char)_T,_TEXT,L

的Unicode / ANSI:lstrlen lstrcpy lstrcpyn lstrcat LSTRCMP LSTRCMPI

调用vsprintf wsprintf wvsprintf _vsntprintf

va_list的,的va_start,va_arg用来,va_end

PlaySound的滚屏ScrollDC BR />InvalidateRect函数InvalidateRgb

GetTextMetrics(得到直流文本度量)GetTextFace(Set. ..)

GetClientDC来GetWindowDC

SetScrollRange用SetScrollPos SetScrollSizes SetScrollInfo

WM_PAINT:BeginPaint函数调用,使区成直流电有效

的CreateCompatibleDC GetDeviceCaps SetTextAlign

图形渲染功能:与setPixel(GetPixel的)

lineTo的多段线(无填充)/多边形(填充)PolylineTo PolyPolyline弧

>PolyBezier PolyBezierTo 包含arcTo AngleArc多边形绘制

椭圆矩形RoundRect和弦派

个CreatePen CreatePenIndirect GETOBJECT选择对象DELETEOBJECT(HPEN)

SetBkColor SetTextColor SetBkMode SetROP2(GetROP2)SetPolyFillMode

CreateBrushIndirect CreateSolidBrush CreateHatchBrush

CreatePatternBrush CreateDIBPatternBrushPt(对位图创建刷子基)

SetMapMode(GetMapMode)SetWindowExtEx DPtoLP函数LPtoDP函数

SetViewportOrgEx SetWindowOrgEx

区域和剪裁:

FillRect FrameRect InvertRect (矩形都喜欢素色翻转)

SetRect对OffsetRect InflateRect SetRectEmpty CopyRect

IntersectRect(路口)UnionRect IsRectEmpty的PtInRect

CreateRectRgn(当你创建一个区域,得到的句柄地区)CreateRectRgnIndirect CreateEllipticRgn CreateEllipticRgnIndirect

处理CreatePolygonRgn CombineRgn

面积可用于未来四年的绘图功能:FillRgn FrameRgn InvertRgn PaintRgn

(您必须使用DELETEOBJECT(HRGN)删除后无法使用该地区的您创建)

键盘:函数GetKeyState GetAsyncKeyState GetKeyNameText

ScreenToClient ClientToScreen CreateCaret SetCaretPos ShowCaret

windowclass CS | = CS_DBLCLKS

鼠标:WM_NCHITTEST每次调用ShowCursor GetCursorPos(SetCursorPos)

releaseCapture释放SetCapture函数

SetWindowLong函数(GetWindowLong)SetClassLong(GetClassLong)

SETFOCUS(GETFOCUS)函数GetDlgItem WM_SETFOCUS WM_KILLFOCUS

SystemParametersInfo DrawBoxOutline

定时器:SetTimer的KillTimer函数WM_TIMECHANGE

GetLocalTime(SetLocalTime)GETSYSTEMTIME(SetSystemTime)

GetDateFormat GetLocaleInfo

的getParent GetDlgCtrlID IsWindowVisible

按钮:BS_OWNERDRAW

通知代码:BN_SETFOCUS发送一条消息:BM_SETCHECK BM_SETIMAGE

GetSysColors(SetSysColors)滚屏

按钮抽奖:WM_CTLCOLORBTN从绘画风格:BS_OWNERDRAW WM_DRAWITEM消息

WM_CTLCOLORBTN:很少用

WM_ERASEBKGND:返回TRUE

WM_PAINT:窗口没有响应

WM_DRAWITEM:自画像

SetClassLong(HWND,GCL_HBRBACKGROUND,(LONG)CreateSolidBrush(...))

WM_CTLCOLORSCROLLBAR(回报背景颜色)

WM_CTLCOLORSTATIC(与SetTextColor和SetBkColor设置前景色和背景色) WM_SYSCOLORCHANGE

文本编辑框:通知码:EN_SETFOCUS EN_KILLFOCUS EN_CHANGE EN_UPDATE

消息:EM_GETSEL EM_SETSEL EM_GETLINECOUNT EM_LINEINDEX

EM_LINELENGTH EM_GETLINE

重绘标志:WM_SETREDRAW(TRUE / FALSE)

列表框:LB_RESETCONTENT LB_DELETESTRING LB_ADDSTRING LB_INSERTSTRING等

强大的消息:LB_DIR

通知代码:LBN_SELCHANGE LBN_KILLFOCUS等GetEnvironmentStrings

菜单和资源:DrawIcon AnsiNext LockResource(LoadResource(FindResource))

CreateMenu AppendMenu DeleteMenu InsertMenu ModifyMenu RemoveMenu BR />EnableMenuItem IsClipboardFormatAvaliable

DrawMenuBar GetSubMenu来GetMenuItemCount GetMenuItemID CheckMenuItem

GetMenuString GetMenuState DestroyMenu来TrackPopupMenu LoadMenu的SetMenu

快捷键:LoadAccelerators REGISTERHOTKEY TranslateAccelerator的

模态对话框:DialogBox的DialogBoxIndirect DialogBoxParam时处理WM_INITDIALOG消息并在退出时的EndDialog

向子控件CheckRadioButton CheckDlgButton IsDlgButtonChecked 非模态对话框:CreateDialog函数CreateDialogIndirect的ShowWindow SetDlgItemText

消息处理,在主窗口的消息循环中加入:IsDialogMessage会

通用对话框:的GetOpenFileName则GetSaveFileName CHOOSECOLOR

FindText一个replaceText

MSDN示例:使用通用对话框

内存分配:的GlobalAlloc GlobalReAlloc GlobalSize GlobalFree(GlobalHandle(P))

GlobalLock GlobalUnlock CopyMemory

剪辑局:OpenClipboard EmptyClipboard SetClipboardData CloseClipboard

GetClipboardData IsClipboardFormatAvailable EnumClipboardFormats

CountClipboardFormats RegisterClipboardFormat GetClipboardFormatName

剪贴板钩:SetClipboardViewer(HWND) - >WM_DRAWCLIPBOARD )

解开:ChangeClipboardChain

GetClipboardViewer WM_CHANGECBCHAIN WM_DRAWCLIPBOARD

“Window程序设计”一书回顾:??

打印机:CreateDC PRINTDLG STARTDOC起始页尾页页次ENDDOC BR />EnumPrinters的getVersion(防爆)WM_SETTINGCHANGE消息WM_INITMENUPOPUP

OpenPrinter PrinterProperties CREATEIC GetPrinterDC

SETABORTPROC(使用回调函数来中止打印任务)WM_SETTINGCHANGE

设备相关的位图:

CreateBitmap函数CreateBitmapIndirect

BitBlt函数StretchBlt的SetStretchBltMode的PatBlt

SetBitmapBits GetBitmapBits

CreatePatternBrush CreateBrush CreateBrushIndirect

WM_DISPLAYCHANGE的CreateCompatibleDC(DC内存映射原理)

GetSystemBmenu AppendMenu:插入一个位图菜单GetTextExtentPoint32

LockWindowUpdata (GetDesktopWindow或其他或为空)GetDCEx

设备无关位图:

BITMAPFILEHEADER BITMAPCOREHEADER SetFilePointer SetEndOfFile

的CreateFile GetFileSize CloseHandle的SetCursor每次调用ShowCursor

SetDIBitsToDevice的StretchDIBits主DIB格式和显示方法

CreateDIBitmap(创建)SetDIBits(INIT像素)这两个函数从DIB到DDB

从DDB GetDIBits到DIB

DIB:文件或内存块

DDB:GDI位图对象表示由位图句柄

CreateDIBSection:创建一个DIB,利润归还DIB数据部分,而不是GDI

的句柄(窗口的重要功能:指向设备无关位图,但返回的句柄和 *** 作设备的相关功能可用)显示DIB三种方式

①DIB与SetDIBitsToDevice或将的StretchDIBits直接在屏幕上显示出来,慢

②与CreateDIBitmap和SetDIBits将DIB转换成DDB,然后使用的BitBlt或StretchBlt的显示

③DIB与CreateDIBSection节中创建,然后使用的BitBlt或StretchBlt的显示

调色板:当CreatePalette SelectPalette RealizePalette UpdateColors

本章中未兴趣,看到未来的相关文章再次在网络上学习,:)

文字的字体:

TrueType字体:轮廓字体技术,

的TextOut TabbedTextOut ExtTextOut DrawText的DrawTextEx

SetTextColor SetBKMode SetBkColor SetTextCharacterExtra

GDI字体:点阵列,中风,TrueType字体

设备字体:内置的硬件设备(打印机)

的CreateFont CreateFontIndirect(旋转字体)

SetGraphicsMode SetMapperFlags ModifyWorldTransform字体

EnumFontFamilies SetTextJustification

>GetDialogBaseUnits GetTextExtentPoint32(获取文本的宽度和高度)

程序,需要仔细调试,特别是包装印刷过程

ExtCreatePen(用逻辑画刷)beginPath方法(这两个函数的中间绘制等值线字)EndPath

StrokePath StrokeAndFillPath

图元文件:CreateMetaFile CloseMetaFile DeleteMetaFile / DeleteFile的

PlayMetaFile SetMetaFileBitsEx

本章不感兴趣,去学习,看看网络中的相关条款,后: )

多文档界面:该程序需要仔细的试运行,重要的是一斤

hClient = GetWindow(hFrame,GW_CHILD)

一个窗口类:MDICLIENT

五大功能:DefFrameProc给DefMDIChildProc TranslateMDISysAccel

两种结构:CLIENTCREATESTRUCT(客户端窗口的显示区域包括的帧窗口)

MDICREATESTRUCT(有一个指向这个结构作为一个参数传送给客户WM_MDICREATE窗口的信息,用于创建一个子窗口)

12消息:

WM_MDICREATE子窗口创建消息并返回子窗口句柄

WM_MDIGETACTIVE得到的MDI子窗口的活动子窗口句柄

WM_MDIDESTROY破坏(通过手柄消息实现)

WM_MDIRESTORE恢复状态

WM_MDISETMENU子窗口框架设置菜单

主题:的CreateThread _beginthread

CRITICAL_SECTION EnterCriticalSection的LeaveCriticalSection

DeleteCriticalSection CreateEvent的ResetEvent的WaitForSingleObject

每个线程都有自己的堆栈TlsAlloc TlsSetValue()TlsGetValue TlsFree

的__declspec(线程)用extern“C”的原因(C应资本化! )

DLL:

DLL入口/出口点:DLL_PROCESS_ATTACH等

DLL共享内存:创建DLL的共享部分。的#pragma的data_seg(“共享”)

/段:共享,RWS

调用LoadLibrary FreeLibrary则GetProcAddress函数

声音与音乐:的mciSendString的waveOut ...

享受互联网: ...

CDC::BitBlt

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索引。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11918786.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存