大家好,又见面了,我是你们的朋友全栈君。
CImage
提供增强的位图支持,包括加载和保存采用 JPEG、GIF、BMP 和可移植网络图形格式的图像 (PNG) 格式。
说明
无法在 Windows 运行时中执行的应用程序中使用此类及其成员。
语法
代码语言:javascript复制class CImage
成员
公共构造函数
“属性” | 说明 |
---|---|
CImage::CImage | 构造函数。 |
公共方法
“属性” | 说明 |
---|---|
CImage::AlphaBlend | 显示具有透明或半透明像素的位图。 |
CImage::Attach | 将 HBITMAP 附加到 CImage 对象。 可以与非 DIB 节位图或 DIB 节位图一起使用。 |
CImage::BitBlt | 将位图从源设备上下文复制到此当前设备上下文。 |
CImage::Create | 创建 DIB 节位图,并附加到以前构造的对象 CImage 。 |
CImage::CreateEx | 创建具有其他参数的 DIB (位图) ,并附加到以前构造 CImage 的对象。 |
CImage::Destroy | 从 对象分离位 CImage 图并销毁位图。 |
CImage::Detach | 从 对象分离位 CImage 图。 |
CImage::Draw | 将位图从源矩形复制到目标矩形。 Draw 拉伸或压缩位图以适应目标矩形的尺寸(如有必要)并处理 alpha 混合和透明颜色。 |
CImage::GetBits | 检索指向位图的实际像素值的指针。 |
CImage::GetBPP | 检索每个像素的位数。 |
CImage::GetColorTable | 从颜色表中的一系列条目 (RGB) 红色、绿色、蓝色和 RGB 值。 |
CImage::GetDC | 检索选择当前位图的设备上下文。 |
CImage::GetExporterFilterString | 查找可用的图像格式及其说明。 |
CImage::GetHeight | 检索当前图像的高度(以像素为单位)。 |
CImage::GetImporterFilterString | 查找可用的图像格式及其说明。 |
CImage::GetMaxColorTableEntries | 检索颜色表中的最大条目数。 |
CImage::GetPitch | 检索当前图像的间距(以字节为单位)。 |
CImage::GetPixel | 检索 由 和 指定的像素 x 的颜色 y 。 |
CImage::GetPixelAddress | 检索给定像素的地址。 |
CImage::GetTransparentColor | 检索透明颜色在颜色表中的位置。 |
CImage::GetWidth | 检索当前图像的宽度(以像素为单位)。 |
CImage::IsDIBSection | 确定附加的位图是否为 DIB 部分。 |
CImage::IsIndexed | 指示位图的颜色映射到索引调色板。 |
CImage::IsNull | 指示当前是否加载了源位图。 |
CImage::IsTransparencySupported | 指示应用程序是否支持透明位图。 |
CImage::Load | 从指定文件加载图像。 |
CImage::LoadFromResource | 从指定的资源加载图像。 |
CImage::MaskBlt | 使用指定的掩码和光栅操作合并源位图和目标位图的颜色数据。 |
CImage::PlgBlt | 执行从源设备上下文中的矩形到目标设备上下文中的并行四边形的位块传输。 |
CImage::ReleaseDC | 释放使用 检索的设备上下文 CImage::GetDC 。 |
CImage::ReleaseGDIPlus | 释放由资源GDI 。 必须调用 以释放由全局对象创建 CImage 的资源。 |
CImage::Save | 将图像保存为指定类型。 Save 无法指定图像选项。 |
CImage::SetColorTable | 设置红色、绿色、蓝色 RGB) DIB 部分的颜色表中一系列条目的颜色值。 |
CImage::SetPixel | 将指定坐标中的像素设置为指定颜色。 |
CImage::SetPixelIndexed | 将位于指定坐标的像素设置到调色板的指定索引位置的颜色。 |
CImage::SetPixelRGB | 将指定坐标的像素设置为指定的红色、绿色、蓝色 (RGB) 值。 |
CImage::SetTransparentColor | 设置要视为透明的颜色的索引。 调色板中只能有一种颜色是透明的。 |
CImage::StretchBlt | 如有必要,将位图从源矩形复制到目标矩形,拉伸或压缩位图以适应目标矩形的尺寸。 |
CImage::TransparentBlt | 将具有透明颜色的位图从源设备上下文复制到当前设备上下文。 |
公共运算符
“属性” | 说明 |
---|---|
CImage::operator HBITMAP | 返回Windows对象的对象句柄 CImage 。 |
注解
CImage
采用与设备无关的位图或 DIB (部分) 位图;但是,只能对 CreateCImage::Load DIB 部分使用 或 。 可以使用 将非 DIB 节位图附加到 对象,但不能使用以下仅支持 CImage
Attach DIB 节 CImage
位图的方法:
- GetBits
- GetColorTable
- GetMaxColorTableEntries
- GetPitch
- GetPixelAddress
- IsIndexed
- SetColorTable
若要确定附加位图是否为 DIB 部分,请调用 IsDibSection 。
备注
在 Visual Studio .NET 2003 中,此类保留所创建对象 CImage
数的计数。 每当计数为 0 时,都会自动调用 函数,以释放 GdiplusShutdown
GDI 。 这可确保始终正确销毁由 DLL 直接或间接创建的任何对象,并且 CImageGdiplusShutdown
不会从 调用 DllMain
这些对象。
备注
不建议 CImage
在 DLL 中使用全局对象。 如果需要在 DLL 中使用全局对象,请调用 显式释放由 CImage
CImage::ReleaseGDIPlus GDI 。
CImage
无法选择到新的 CDC 中。 CImage
为映像 HDC
创建其自己的 。 因为一次只能选择一个 ,所以不能将与 关联的 HBITMAPHDCHBITMAPCImage
选定到另一个 HDC
中。 如果需要 , CDC
请从 中 HDC
检索 CImage
,并赋予 CDC::FromHandle 。
示例
代码语言:javascript复制// Get a CDC for the image
CDC* pDC = CDC::FromHandle(m_myImage.GetDC());
// Use pDC here
pDC->Rectangle(0, 40, 100, 50);
m_myImage.ReleaseDC();
在 CImage
MFC 项目中使用 时,请注意项目中的哪些成员函数需要指向 对象的 CBitmap 指针。 如果要与此类函数(如 )一起使用 , CImage
CMenu::AppendMenu 请使用 CBitmap::FromHandle ,将 传递给 CImageHBITMAP
它,并使用返回的 CBitmap*
。
void CMyDlg::OnRButtonDown(UINT nFlags, CPoint point)
{
UNREFERENCED_PARAMETER(nFlags);
CBitmap* pBitmap = CBitmap::FromHandle(m_myImage);
m_pmenuPop->AppendMenu(0, ID_BMPCOMMAND, pBitmap);
ClientToScreen(&point);
m_pmenuPop->TrackPopupMenu(TPM_RIGHTBUTTON | TPM_LEFTALIGN, point.x,
point.y, this);
}
通过 CImage
,可以访问 DIB 节的实际位。 可以在以前使用过 CImage
Win32 或 DIB 节的任何位置 HBITMAP
使用 对象。
可以从 CImage
MFC 或 ATL 使用 。
备注
使用 创建项目时 CImage
,必须先定义 CString
,然后才能包括 atlimage.h
。 如果项目使用不带 MFC 的 ATL,请包括 atlstr.h
,然后再包括 atlimage.h
。 如果项目使用 MFC (或者它是具有 MFC 支持的 ATL 项目,) 之前 afxstr.h
包括 atlimage.h
。
同样,在包含 之前 atlimage.h
必须包含 atlimpl.cpp
。 若要轻松完成此操作,请 (atlimage.hpch.hstdafx.h
2017 Visual Studio及更早版本中的) 。
要求
头:
CImage::AlphaBlend
显示具有透明或半透明像素的位图。
代码语言:javascript复制BOOL AlphaBlend(
HDC hDestDC,
int xDest,
int yDest,
BYTE bSrcAlpha = 0xff,
BYTE bBlendOp = AC_SRC_OVER) const throw();
BOOL AlphaBlend(
HDC hDestDC,
const POINT& pointDest,
BYTE bSrcAlpha = 0xff,
BYTE bBlendOp = AC_SRC_OVER) const throw();
BOOL AlphaBlend(
HDC hDestDC,
int xDest,
int yDest,
int nDestWidth,
int nDestHeight,
int xSrc,
int ySrc,
int nSrcWidth,
int nSrcHeight,
BYTE bSrcAlpha = 0xff,
BYTE bBlendOp = AC_SRC_OVER);
BOOL AlphaBlend(
HDC hDestDC,
const RECT& rectDest,
const RECT& rectSrc,
BYTE bSrcAlpha = 0xff,
BYTE bBlendOp = AC_SRC_OVER);
参数
hDestDC
目标设备上下文的句柄。
xDest
目标矩形左上角的 x 坐标(以逻辑单位为单位)。
yDest
目标矩形左上角的 y 坐标(以逻辑单位为单位)。
bSrcAlpha
要用于整个源位图的 alpha 透明度值。 默认0xff (255) 假定图像不透明,并且只想使用每像素 alpha 值。
bBlendOp
源位图和目标位图的 alpha 混合函数、要应用于整个源位图的全局 alpha 值,以及源位图的格式信息。 源和目标混合函数当前限制为 AC_SRC_OVER
。
pointDest
对 结构 POINT 的引用,该结构以逻辑单元标识目标矩形的左上角。
nDestWidth
目标矩形的宽度(以逻辑单位为单位)。
nDestHeight
目标矩形的高度(以逻辑单位为单位)。
xSrc
源矩形左上角的逻辑 x 坐标。
ySrc
源矩形左上角的逻辑 y 坐标。
nSrcWidth
源矩形的宽度(以逻辑单位为单位)。
nSrcHeight
源矩形的高度(以逻辑单位为单位)。
rectDest
对 结构 RECT 的引用,标识目标。
rectSrc
对 结构 RECT
的引用,标识源。
返回值
如果成功,则不为 0;否则为 0。
注解
Alpha 混合位图支持按像素混合颜色。
当 设置为 的默认值时,源位图将基于源像素的 alpha 值放置在目标 bBlendOp
AC_SRC_OVER
位图上。
CImage::Attach
附加到 hBitmap
CImage
对象。
void Attach(HBITMAP hBitmap, DIBOrientation eOrientation = DIBOR_DEFAULT) throw();
参数
hBitmap
的句柄 HBITMAP
。
eOrientation
指定位图的方向。 可以是以下值之一:
-
DIBOR_DEFAULT
位图的方向由操作系统确定。 -
DIBOR_BOTTOMUP
位图的行顺序相反。 这将导致 CImage::GetBits 在位图缓冲区末尾附近返回指针, CImage::GetPitch 并返回负数。 -
DIBOR_TOPDOWN
位图的行按从上到下的顺序排序。 这将导致 CImage::GetBits 返回指向位图缓冲区的第一个字节的指针, CImage::GetPitch 并返回正数。
注解
位图可以是非 DIB 节位图或 DIB 节位图。 有关只能与 DIB 节位图一起使用的方法的列表 IsDIBSection ,请参阅 。
CImage::BitBlt
将位图从源设备上下文复制到此当前设备上下文。
代码语言:javascript复制BOOL BitBlt(
HDC hDestDC,
int xDest,
int yDest,
DWORD dwROP = SRCCOPY) const throw();
BOOL BitBlt(
HDC hDestDC,
const POINT& pointDest,
DWORD dwROP = SRCCOPY) const throw();
BOOL BitBlt(
HDC hDestDC,
int xDest,
int yDest,
int nDestWidth,
int nDestHeight,
int xSrc,
int ySrc,
DWORD dwROP = SRCCOPY) const throw();
BOOL BitBlt(
HDC hDestDC,
const RECT& rectDest,
const POINT& pointSrc,
DWORD dwROP = SRCCOPY) const throw();
参数
hDestDC
目标 HDC
。
xDest
目标矩形左上角的逻辑 x 坐标。
yDest
目标矩形左上角的逻辑 y 坐标。
dwROP
要执行的星号操作。 Raster-operation 代码准确定义了如何组合源、目标以及模式位, (所选画笔定义) 形成目标。 有关其他Windows代码及其说明的列表,请参阅 Windows SDK BitBlt 中的 。
pointDest
一 POINT 个 结构,指示目标矩形的左上角。
nDestWidth
目标矩形的宽度(以逻辑单位为单位)。
nDestHeight
目标矩形的高度(以逻辑单位为单位)。
xSrc
源矩形左上角的逻辑 x 坐标。
ySrc
源矩形左上角的逻辑 y 坐标。
rectDest
指示 RECT 目标矩形的 结构。
pointSrc
一 POINT
个 结构,指示源矩形的左上角。
返回值
如果成功,则不为零,否则为零。
注解
有关详细信息,请参阅 BitBlt Windows SDK。
CImage::CImage
构造 CImage
对象。
CImage() throw();
注解
构造对象后,调用 CreateLoad 、、 或 以 LoadFromResourceAttach 将位图附加到对象。
注意在Visual Studio中,此类保留所创建对象 数的计数。 每当计数为 0 时,都会自动调用 函数以释放 GdiplusShutdown
由 GDI 。 这可确保始终正确销毁由 DLL 直接或间接创建的任何对象,并且不会从 CImageGdiplusShutdown
DllMain 调用这些对象。
不建议 CImage
在 DLL 中使用全局对象。 如果需要在 DLL 中使用全局对象,请调用 显式释放由 CImage
CImage::ReleaseGDIPlus GDI 。
CImage::Create
创建位 CImage
图并将其附加到以前构造的对象 CImage
。
BOOL Create(
int nWidth,
int nHeight,
int nBPP,
DWORD dwFlags = 0) throw();
参数
nWidth
位图 CImage
的宽度(以像素为单位)。
nHeight
位图 CImage
的高度(以像素为单位)。 如果 nHeight
为正,则位图为从下到上 DIB,其原点位于左下角。 如果 nHeight
为负数,则位图为从上到下 DIB,其原点为左上角。
nBPP
位图中每个像素的位数。 通常为 4、8、16、24 或 32。 对于 monochrome 位图或掩码,可以是 1。
dwFlags
指定位图对象是否具有 alpha 通道。 可以是零个或多个以下值的组合:
createAlphaChannel
只有在 为 32 且 为nBPP
时,才能eCompression
使用BI_RGB
。 如果指定,则创建的图像具有每个像素的 alpha (透明度) 值,存储在非 alpha 32 位图像中未使用的每个像素 (的第 4 个字节) 。 调用 时,会自动使用此 alpha 通道 CImage::AlphaBlend 。
备注
在对 CImage::Draw 的调用中,具有 alpha 通道的图像会自动 alpha 混合到目标。
返回值
如果成功,则不为 0;否则为 0。
CImage::CreateEx
创建位 CImage
图并将其附加到以前构造的对象 CImage
。
BOOL CreateEx(
int nWidth,
int nHeight,
int nBPP,
DWORD eCompression,
const DWORD* pdwBitmasks = NULL,
DWORD dwFlags = 0) throw();
参数
nWidth
位图 CImage
的宽度(以像素为单位)。
nHeight
位图 CImage
的高度(以像素为单位)。 如果 nHeight
为正,则位图为从下到上 DIB,其原点位于左下角。 如果 nHeight
为负数,则位图为从上到下 DIB,其原点为左上角。
nBPP
位图中每个像素的位数。 通常为 4、8、16、24 或 32。 对于 monochrome 位图或掩码,可以是 1。
eCompression
指定压缩的自下向上位图的压缩类型 (不能压缩自顶向下的 DIB) 。 可以是以下其中一个值:
-
BI_RGB
格式未压缩。 调用 时指定此值CImage::CreateEx
等效于调用CImage::Create
。 -
BI_BITFIELDS
格式未压缩,颜色表包含三个颜色掩码,分别指定每个像素的红色、绿色和DWORD
蓝色分量。 与 16 和 32-bpp 位图一同使用时,这一点有效。
pdwBitfields
仅在 设置为 eCompression
时使用 BI_BITFIELDS
,否则它必须为 NULL
。 指向包含三个位掩码的数组的指针,指定每个像素的哪些位分别用于颜色的红色、绿色和蓝色 DWORD
分量。 有关位域限制的信息,请参阅 Windows BITMAPINFOHEADER SDK。
dwFlags
指定位图对象是否具有 alpha 通道。 可以是零个或多个以下值的组合:
-
createAlphaChannel
只有在 为 32 且 为nBPP
时,才能eCompression
使用BI_RGB
。 如果指定,则创建的图像具有每个像素的 alpha (透明度) 值,存储在非 alpha 32 位图像中未使用的每个像素 (的第 4 个字节) 。 调用 时,会自动使用此 alpha 通道 CImage::AlphaBlend 。 备注 在对 CImage::Draw 的调用中,具有 alpha 通道的图像会自动 alpha 混合到目标。
返回值
TRUE
如果成功。 否则为 FALSE
。
示例
以下示例创建一个 100×100 像素位图,使用 16 位对每个像素进行编码。 在给定的 16 位像素中,位 0-3 对红色分量进行编码,4-7 位编码为绿色,位 8-11 编码为蓝色。 剩余的 4 位未使用。
代码语言:javascript复制DWORD adwBitmasks[3] = { 0x0000000f, 0x000000f0, 0x00000f00 };
m_myImage.CreateEx(100, 100, 16, BI_BITFIELDS, adwBitmasks, 0);
CImage::Destroy
从 对象分离位 CImage
图并销毁位图。
void Destroy() throw();
CImage::Detach
从 对象分离位 CImage
图。
HBITMAP Detach() throw();
返回值
已分离位图的句柄;如果未附加 NULL
位图,则为 。
CImage::Draw
将位图从源设备上下文复制到当前设备上下文。
代码语言:javascript复制BOOL Draw(
HDC hDestDC,
int xDest,
int yDest,
int nDestWidth,
int nDestHeight,
int xSrc,
int ySrc,
int nSrcWidth,
int nSrcHeight) const throw();
BOOL Draw(
HDC hDestDC,
const RECT& rectDest,
const RECT& rectSrc) const throw();
BOOL Draw(
HDC hDestDC,
int xDest,
int yDest) const throw();
BOOL Draw(
HDC hDestDC,
const POINT& pointDest) const throw();
BOOL Draw(
HDC hDestDC,
int xDest,
int yDest,
int nDestWidth,
int nDestHeight) const throw();
BOOL Draw(
HDC hDestDC,
const RECT& rectDest) const throw();
参数
hDestDC
目标设备上下文的句柄。
xDest
目标矩形左上角的 x 坐标(以逻辑单位为单位)。
yDest
目标矩形左上角的 y 坐标(以逻辑单位为单位)。
nDestWidth
目标矩形的宽度(以逻辑单位为单位)。
nDestHeight
目标矩形的高度(以逻辑单位为单位)。
xSrc
源矩形左上角的 x 坐标(以逻辑单位为单位)。
ySrc
源矩形左上角的 y 坐标(以逻辑单位为单位)。
nSrcWidth
源矩形的宽度(以逻辑单位为单位)。
nSrcHeight
源矩形的高度(以逻辑单位为单位)。
rectDest
对 结构 RECT 的引用,标识目标。
rectSrc
对 结构 RECT
的引用,标识源。
pointDest
对 结构 POINT 的引用,该结构以逻辑单元标识目标矩形的左上角。
返回值
如果成功,则不为 0;否则为 0。
注解
Draw
执行与 相同的操作 StretchBlt ,除非图像包含透明色或 alpha 通道。 在这种情况下, Draw
将执行与 或 所需的 TransparentBltAlphaBlend 相同操作。
对于未指定 Draw
源矩形的 的版本,整个源映像是默认值。 对于未指定目标矩形大小的 版本,源图像的大小为默认值,不会发生拉伸或 Draw
收缩。
CImage::GetBits
检索指向位图中给定像素的实际位值的指针。
代码语言:javascript复制void* GetBits() throw();
返回值
指向位图缓冲区的指针。 如果位图是从下向上的 DIB,则指针指向靠近缓冲区末尾的位置。 如果位图是自上而下的 DIB,则指针指向缓冲区的第一个字节。
注解
使用此指针以及 返回的值 GetPitch ,可以查找和更改图像中的单个像素。
备注
此方法仅支持 DIB 节位图;因此,访问对象的像素的方式与访问 DIB 节的像素 CImage
的方式相同。 返回的指针指向 0,0 (位置的像素) 。
CImage::GetBPP
检索每像素位数值。
代码语言:javascript复制int GetBPP() const throw();
返回值
每个像素的位数。
注解
此值确定定义每个像素的位数和位图中的最大颜色数。
每个像素的位数通常为 1、4、8、16、24 或 32。 有关 biBitCount
此值 BITMAPINFOHEADER Windows请参阅 Windows SDK 中的 成员。
CImage::GetColorTable
从 DIB 部分调色板中的 (中检索) RGB 的红色、绿色、蓝色和 RGB 值。
代码语言:javascript复制void GetColorTable(
UINT iFirstColor,
UINT nColors,
RGBQUAD* prgbColors) const throw();
参数
iFirstColor
要检索的第一个条目的颜色表索引。
nColors
要检索的颜色表条目数。
prgbColors
指向用于检索颜色 RGBQUAD 表条目的结构数组的指针。
CImage::GetDC
检索当前已选择图像的设备上下文。
代码语言:javascript复制HDC GetDC() const throw();
返回值
设备上下文的句柄。
注解
每次调用 GetDC
时,都必须对 进行后续调用 ReleaseDC 。
CImage::GetExporterFilterString
查找可用于保存图像的图像格式。
代码语言:javascript复制static HRESULT GetExporterFilterString(
CSimpleString& strExporters,
CSimpleArray<GUID>& aguidFileTypes,
LPCTSTR pszAllFilesDescription = NULL,
DWORD dwExclude = excludeDefaultSave,
TCHAR chSeparator = _T('|'));
参数
strExporters
对 CSimpleString
对象的引用。 有关详细信息,请参阅备注。
aguidFileTypes
GUID 的数组,其中每个元素对应于字符串中的一种文件类型。 在下面的示例 pszAllFilesDescription
中, 为 ,其余数组值是当前操作系统 aguidFileTypes[0]
GUID_NULL
支持的映像文件格式。
备注
有关常量的完整列表,请参阅Windows SDK 中的图像文件格式常量。
pszAllFilesDescription
如果此参数不是 NULL
,则筛选器字符串将在列表的开头有一个附加筛选器。 此筛选器说明的当前值为 ,并接受列表中任何其他导出程序支持的任何 pszAllFilesDescription
扩展名的文件。
例如:
代码语言:javascript复制//First filter in the list will be titled "All Image Files", and
//will accept files with any extension supported by any exporter.
CImage::GetExporterFilterString(
strExporters, aguidFileTypes,
_T("All Image Files"));
dwExclude
一组位标志,指定要从列表中排除的文件类型。 允许的标志包括:
-
excludeGIF
= 0x01排除 GIF 文件。 -
excludeBMP
= 0x02排除 BMP (Windows位图) 文件。 -
excludeEMF
= 0x04 EMF (增强型图元) 文件。 -
excludeWMF
= 0x08排除 WMF (Windows元) 文件。 -
excludeJPEG
= 0x10排除 JPEG 文件。 -
excludePNG
= 0x20排除 PNG 文件。 -
excludeTIFF
= 0x40排除 TIFF 文件。 -
excludeIcon
= 0x80排除 ICO (Windows 图标) 文件。 -
excludeOther
= 0x80000000 排除上面未列出的任何其他文件类型。 -
excludeDefaultLoad
= 0 对于加载,默认情况下包含所有文件类型 -
excludeDefaultSave
=excludeIcon | excludeEMF | excludeWMF
保存时,默认情况下会排除这些文件,因为它们通常具有特殊的要求。
chSeparator
图像格式之间使用的分隔符。 有关详细信息,请参阅备注。
返回值
标准 HRESULT
。
注解
可以将生成的格式字符串传递给 MFC 对象,以在”文件另存为”对话框中公开可用图像 CFileDialog 格式的文件扩展名。
参数 strExporter
的格式为:
文件 description0|*.ext0|filedescription1|*.ext1|…文件说明 n|*.ext n
其中”|”是由 指定的分隔符 chSeparator
。 例如:
"Bitmap format|*.bmp|JPEG format|*.jpg|GIF format|*.gif|PNG format|*.png||"
如果向 MFC 对象|,请使用默认分隔符 CFileDialog
“|”。 如果将此字符串传递到常见的”文件保存”对话框,请使用 null 分隔符” ″。
CImage::GetHeight
检索图像的高度(以像素为单位)。
代码语言:javascript复制int GetHeight() const throw();
返回值
图像的高度(以像素为单位)。
CImage::GetImporterFilterString
查找可用于加载图像的图像格式。
代码语言:javascript复制static HRESULT GetImporterFilterString(
CSimpleString& strImporters,
CSimpleArray<GUID>& aguidFileTypes,
LPCTSTR pszAllFilesDescription = NULL,
DWORD dwExclude = excludeDefaultLoad,
TCHAR chSeparator = _T('|'));
参数
strImporters
对 CSimpleString
对象的引用。 有关详细信息,请参阅备注。
aguidFileTypes
Guid 的数组,其中每个元素对应于字符串中的一种文件类型。 在下面的示例中 pszAllFilesDescription
,* aguidFileTypes[0]*
为, GUID_NULL
其余数组值为当前操作系统支持的图像文件格式。
备注
有关常量的完整列表,请参阅 Windows SDK 中的图像文件格式常数。
pszAllFilesDescription
如果此参数不为 NULL
,则筛选器字符串将在列表的开头添加一个附加筛选器。 此筛选器的说明将具有的当前值 pszAllFilesDescription
,并接受列表中任何其他导出程序支持的任何扩展名的文件。
例如:
代码语言:javascript复制//First filter in the list will be titled "All Image Files", and
//will accept files with any extension supported by any importer.
CImage::GetImporterFilterString(
strImporters, aguidFileTypes,
_T("All Image Files"));
dwExclude
用于指定要从列表中排除的文件类型的一组位标志。 允许的标志包括:
-
excludeGIF
= 0x01 不包括 GIF 文件。 -
excludeBMP
= 0x02 Windows 位图) 文件中不包括 BMP (。 -
excludeEMF
= 0x04 不包括 EMF (增强型图元文件) 文件。 -
excludeWMF
= 0x08 Windows 图元文件) 文件中排除 WMF (。 -
excludeJPEG
= 0x10 排除 JPEG 文件。 -
excludePNG
= 0x20 排除 PNG 文件。 -
excludeTIFF
= 0x40 不包括 TIFF 文件。 -
excludeIcon
= 0x80 Windows 图标) 文件中不包括 .ico (。 -
excludeOther
= 0x80000000 排除上面未列出的任何其他文件类型。 -
excludeDefaultLoad
= 0 对于负载,默认情况下包括所有文件类型 -
excludeDefaultSave
=excludeIcon | excludeEMF | excludeWMF
对于保存,默认情况下会排除这些文件,因为这些文件通常具有特殊要求。
chSeparator
图像格式之间使用的分隔符。 有关详细信息,请参阅备注。
注解
可以将生成的格式字符串传递到 MFC CFileDialog 对象,以在 ” CFileDialog ” 对话框中公开可用图像格式的文件扩展名。
参数 strImporter
的格式为:
file description0 | ext0 | filedescription1 | ext1 | .。。文件说明 n| * ext n
其中,”|” 是指定的分隔符 chSeparator
。 例如:
"Bitmap format|*.bmp|JPEG format|*.jpg|GIF format|*.gif|PNG format|*.png||"
如果将此字符串传递到 MFC 对象,请使用默认分隔符 “|” CFileDialog
。 如果将此字符串传递到公共 文件打开 对话框,请使用空分隔符 “ 0″。
CImage::GetMaxColorTableEntries
检索颜色表中的最大项数。
代码语言:javascript复制int GetMaxColorTableEntries() const throw();
返回值
颜色表中的条目数。
注解
此方法仅支持 DIB 节位图。
CImage::GetPitch
检索图像的间距。
代码语言:javascript复制int GetPitch() const throw();
返回值
图像的间距。 如果返回值为负,则位图为下边距 DIB,其原点为左下角。 如果返回值为正,则位图为自顶向下的 DIB,其原点为左上角。
注解
螺距是两个内存地址之间的距离(以字节为单位),表示一个位图行的开头和下一个位图行的开头。 由于螺距以字节为单位进行测量,因此图像的间距有助于确定像素格式。 螺距还可以包括为位图预留的额外内存。
使用 GetPitch
with GetBits 查找图像的各个像素。
备注
此方法仅支持 DIB 节位图。
CImage::GetPixel
检索 x 和 y指定的位置处的像素颜色。
代码语言:javascript复制COLORREF GetPixel(int x, int y) const throw();
参数
x
像素的 x 坐标。
y
像素的 y 坐标。
返回值
像素的红色、绿色、蓝色 (RGB) 值。 如果像素在当前剪辑区域外,则返回值为 CLR_INVALID
。
CImage::GetPixelAddress
检索像素的确切地址。
代码语言:javascript复制void* GetPixelAddress(int x, int y) throw();
参数
x
像素的 x 坐标。
y
像素的 y 坐标。
注解
根据像素的坐标、位图的间距和每个像素的位数确定地址。
对于每个像素小于8位的格式,此方法返回包含像素的字节的地址。 例如,如果图像格式具有每个像素4位的,则 GetPixelAddress
返回字节中第一个像素的地址,并且必须计算每个字节2个像素。
备注
此方法仅支持 DIB 节位图。
CImage::GetTransparentColor
检索调色板中透明颜色的索引位置。
代码语言:javascript复制LONG GetTransparentColor() const throw();
返回值
透明颜色的索引。
CImage::GetWidth
检索图像的宽度(以像素为单位)。
代码语言:javascript复制int GetWidth() const throw();
返回值
位图的宽度(以像素为单位)。
CImage::IsDIBSection
确定附加位图是否为 DIB 部分。
代码语言:javascript复制bool IsDIBSection() const throw();
返回值
TRUE
如果附加位图是 DIB 节,则为。 否则为 FALSE
。
注解
如果位图不是 DIB 部分,则不能使用以下 CImage
仅支持 DIB 节位图的方法:
- GetBits
- GetColorTable
- GetMaxColorTableEntries
- GetPitch
- GetPixelAddress
- IsIndexed
- SetColorTable
CImage::IsIndexed
确定位图的像素是否映射到调色板。
代码语言:javascript复制bool IsIndexed() const throw();
返回值
TRUE
如果已编制索引,否则为 FALSE
。
注解
TRUE
仅当位图为8位 (256 颜色) 或更低时,此方法才会返回。
备注
此方法仅支持 DIB 节位图。
CImage::IsNull
确定当前是否已加载位图。
代码语言:javascript复制bool IsNull() const throw();
注解
TRUE
如果当前未加载位图,此方法将返回; 否则返回 FALSE
。
CImage::IsTransparencySupported
指示应用程序是否支持透明位图。
代码语言:javascript复制static BOOL IsTransparencySupported() throw();
返回值
如果当前平台支持透明度,则为非零值。 否则为0。
注解
如果返回值不为零,并且支持透明度,则对 AlphaBlend 、或的调用 TransparentBltDraw 将处理透明颜色。
CImage::Load
加载图像。
代码语言:javascript复制HRESULT Load(LPCTSTR pszFileName) throw();
HRESULT Load(IStream* pStream) throw();
参数
pszFileName
指向字符串的指针,该字符串包含要加载的图像文件的名称。
pStream
指向流的指针,其中包含要加载的图像文件的名称。
返回值
标准 HRESULT
。
注解
加载或指定的图像 pszFileNamepStream
。
有效图像类型为 BMP、GIF、JPEG、PNG 和 TIFF。
CImage::LoadFromResource
从资源加载 BITMAP
图像。
void LoadFromResource(
HINSTANCE hInstance,
LPCTSTR pszResourceName) throw();
void LoadFromResource(
HINSTANCE hInstance,
UINT nIDResource) throw();
参数
hInstance
包含要加载的映像的模块实例的句柄。
pszResourceName
指向包含要加载的图像的资源名称的字符串的指针。
nIDResource
要加载的资源的 ID。
注解
资源的类型必须为 BITMAP
。
CImage::MaskBlt
使用指定的掩码和光栅操作合并源位图和目标位图的颜色数据。
代码语言:javascript复制BOOL MaskBlt(
HDC hDestDC,
int xDest,
int yDest,
int nDestWidth,
int nDestHeight,
int xSrc,
int ySrc,
HBITMAP hbmMask,
int xMask,
int yMask,
DWORD dwROP = SRCCOPY) const throw();
BOOL MaskBlt(
HDC hDestDC,
const RECT& rectDest,
const POINT& pointSrc,
HBITMAP hbmMask,
const POINT& pointMask,
DWORD dwROP = SRCCOPY) const throw();
BOOL MaskBlt(
HDC hDestDC,
int xDest,
int yDest,
HBITMAP hbmMask,
DWORD dwROP = SRCCOPY) const throw();
BOOL MaskBlt(
HDC hDestDC,
const POINT& pointDest,
HBITMAP hbmMask,
DWORD dwROP = SRCCOPY) const throw();
参数
hDestDC
其可执行文件包含资源的模块的句柄。
xDest
目标矩形左上角的 x 坐标(以逻辑单位为单位)。
yDest
目标矩形左上角的 y 坐标(以逻辑单位为单位)。
nDestWidth
目标矩形和源位图的宽度(以逻辑单位为单位)。
nDestHeight
目标矩形和源位图的高度(以逻辑单位为单位)。
xSrc
源位图左上角的逻辑 x 坐标。
ySrc
源位图左上角的逻辑 y 坐标。
hbmMask
与源设备上下文中的颜色位图组合在一起的单色掩码位图的句柄。
xMask
参数指定的掩码位图的水平像素 hbmMask
偏移量。
yMask
参数指定的掩码位图的垂直像素 hbmMask
偏移量。
dwROP
指定前景色和背景三元色栅运算代码,该方法用于控制源数据和目标数据的组合。 背景色栅操作代码存储在此值的高序字的高序字节中;前台 raster 操作代码存储在此值的高序字的低序字节中;将忽略此值的低序字,并且应为零。 有关此方法上下文中的前景和背景的讨论,请参阅 Windows MaskBlt
SDK。 有关常见 raster 操作代码的列表,请参阅 BitBlt
Windows SDK。
rectDest
对 结构 RECT
的引用,标识目标。
pointSrc
一 POINT
个 结构,指示源矩形的左上角。
pointMask
一 POINT
个 结构,指示掩码位图的左上角。
pointDest
对 结构 POINT
的引用,该结构以逻辑单元标识目标矩形的左上角。
返回值
如果成功,则不为零;否则为 0。
注解
此方法仅适用于 Windows NT 4.0 及更高版本。
CImage::operator HBITMAP
使用此运算符获取对象的Windows GDI 句柄 CImage
的附加对象。 此运算符是强制转换运算符,支持直接使用 HBITMAP
对象。
CImage::PlgBlt
执行从源设备上下文中的矩形到目标设备上下文中的并行四边形的位块传输。
复制
代码语言:javascript复制BOOL PlgBlt(
HDC hDestDC,
const POINT* pPoints,
HBITMAP hbmMask = NULL) const throw();
BOOL PlgBlt(
HDC hDestDC,
const POINT* pPoints,
int xSrc,
int ySrc,
int nSrcWidth,
int nSrcHeight,
HBITMAP hbmMask = NULL,
int xMask = 0,
int yMask = 0) const throw();
BOOL PlgBlt(
HDC hDestDC,
const POINT* pPoints,
const RECT& rectSrc,
HBITMAP hbmMask = NULL,
const POINT& pointMask = CPoint(0, 0)) const throw();
参数
hDestDC
目标设备上下文的句柄。
pPoints
指向逻辑空间中三个点的数组的指针,该数组标识目标并行四边形的三个角。 源矩形的左上角映射到此数组的第一个点,右上角映射到此数组的第二个点,左下角映射到第三个点。 源矩形的右下角映射到并行四边形中的隐式第四个点。
hbmMask
用于屏蔽源矩形颜色的可选 monochrome 位图的句柄。
xSrc
源矩形左上角的 x 坐标(以逻辑单位为单位)。
ySrc
源矩形左上角的 y 坐标(以逻辑单位为单位)。
nSrcWidth
源矩形的宽度(以逻辑单位为单位)。
nSrcHeight
源矩形的高度(以逻辑单位为单位)。
xMask
monochrome 位图左上角的 x 坐标。
yMask
monochrome 位图左上角的 y 坐标。
rectSrc
对结构 RECT 的引用,该结构指定源矩形的坐标。
pointMask
一 POINT 个 结构,指示掩码位图的左上角。
返回值
如果成功,则不为零;否则为 0。
注解
如果 hbmMask
标识有效的单色位图,则使用此位图来屏蔽源 PlgBit
矩形中颜色数据的位。
此方法仅适用于 Windows NT 4.0 及更高版本。 有关详细信息 PlgBlt ,请参阅 Windows SDK 中的 。
CImage::ReleaseDC
释放设备上下文。
代码语言:javascript复制void ReleaseDC() const throw();
注解
由于一次只能在设备上下文中选择一个位图,因此每次调用 ReleaseDC
时都必须调用 GetDC 。
CImage::ReleaseGDIPlus
释放由资源GDI 。
代码语言:javascript复制void ReleaseGDIPlus() throw();
注解
必须调用此方法以释放由全局对象分配 CImage
的资源。 请参阅 CImage::CImage。
CImage::Save
将映像保存到磁盘上的指定流或文件中。
代码语言:javascript复制HRESULT Save(
IStream* pStream,
REFGUID guidFileType) const throw();
HRESULT Save(
LPCTSTR pszFileName,
REFGUID guidFileType = GUID_NULL) const throw();
参数
pStream
指向包含文件图像数据的 COM IStream 对象的指针。
pszFileName
指向图像文件名的指针。
guidFileType
将图像另存为的文件类型。 可以是以下值之一:
-
ImageFormatBMP
未压缩的位图图像。 -
ImageFormatPNG
可移植网络图形 (PNG) 压缩图像。 -
ImageFormatJPEG
JPEG 压缩图像。 -
ImageFormatGIF
GIF 压缩图像。
备注
有关常量的完整列表,请参阅Windows SDK 中的图像文件格式常量。
返回值
标准 HRESULT
。
注解
调用此函数以使用指定的名称和类型保存映像。 如果未 guidFileType
包含 参数,则文件名的文件扩展名将用于确定图像格式。 如果未提供扩展,则映像将保存为 BMP 格式。
CImage::SetColorTable
为 DIB 部分调色板中的 (设置) RGB 的红色、绿色、蓝色和 RGB 颜色值。
代码语言:javascript复制void SetColorTable(
UINT iFirstColor,
UINT nColors,
const RGBQUAD* prgbColors) throw();
参数
iFirstColor
要设置的第一个条目的颜色表索引。
nColors
要设置的颜色表项数。
prgbColors
指向结构数组 RGBQUAD 的指针,用于设置颜色表条目。
注解
此方法仅支持 DIB 节位图。
CImage::SetPixel
设置位图中给定位置的像素的颜色。
代码语言:javascript复制void SetPixel(int x, int y, COLORREF color) throw();
参数
x
要设置的像素的水平位置。
y
要设置的像素的垂直位置。
color
设置像素的颜色。
注解
如果像素坐标位于所选剪辑区域之外,此方法将失败。
CImage::SetPixelIndexed
将像素颜色设置为调色板 iIndex
中位于 的颜色。
void SetPixelIndexed(int x, int y, int iIndex) throw();
参数
x
要设置的像素的水平位置。
y
要设置的像素的垂直位置。
iIndex
调色板中颜色的索引。
CImage::SetPixelRGB
将 和 指定位置的像素设置为 、 和 指示的颜色(在图像中为红色、绿色、蓝色 (xyrgb
RGB) 颜色。
void SetPixelRGB(
int x,
int y,
BYTE r,
BYTE g,
BYTE b) throw();
参数
x
要设置的像素的水平位置。
y
要设置的像素的垂直位置。
r
红色的强度。
g
绿色的强度。
b
蓝色的强度。
注解
红色、绿色和蓝色参数由介于 0 和 255 之间的数字表示。 如果将所有三个参数都设置为零,则生成的合并颜色为黑色。 如果将所有三个参数都设置为 255,则生成的组合颜色为白色。
CImage::SetTransparentColor
将给定索引位置处的颜色设置为透明。
代码语言:javascript复制LONG SetTransparentColor(LONG iTransparentColor) throw();
参数
iTransparentColor
要设置为透明的颜色的调色板中的索引。 如果为 -1,则不将颜色设置为透明。
返回值
以前设置为透明的颜色的索引。
CImage::StretchBlt
将位图从源设备上下文复制到此当前设备上下文。
代码语言:javascript复制BOOL StretchBlt(
HDC hDestDC,
int xDest,
int yDest,
int nDestWidth,
int nDestHeight,
DWORD dwROP = SRCCOPY) const throw();
BOOL StretchBlt(
HDC hDestDC,
const RECT& rectDest,
DWORD dwROP = SRCCOPY) const throw();
BOOL StretchBlt(
HDC hDestDC,
int xDest,
int yDest,
int nDestWidth,
int nDestHeight,
int xSrc,
int ySrc,
int nSrcWidth,
int nSrcHeight,
DWORD dwROP = SRCCOPY) const throw();
BOOL StretchBlt(
HDC hDestDC,
const RECT& rectDest,
const RECT& rectSrc,
DWORD dwROP = SRCCOPY) const throw();
参数
hDestDC
目标设备上下文的句柄。
xDest
目标矩形左上角的 x 坐标(以逻辑单位为单位)。
yDest
目标矩形左上角的 y 坐标(以逻辑单位为单位)。
nDestWidth
目标矩形的宽度(以逻辑单位为单位)。
nDestHeight
目标矩形的高度(以逻辑单位为单位)。
dwROP
要执行的星号操作。 Raster-operation 代码准确定义了如何组合源、目标以及当前所选画笔 (定义的模式) 形成目标。 有关其他Windows代码及其说明的列表,请参阅 Windows SDK BitBlt 中的 。
rectDest
对 结构 RECT 的引用,标识目标。
xSrc
源矩形左上角的 x 坐标(以逻辑单位为单位)。
ySrc
源矩形左上角的 y 坐标(以逻辑单位为单位)。
nSrcWidth
源矩形的宽度(以逻辑单位为单位)。
nSrcHeight
源矩形的高度(以逻辑单位为单位)。
rectSrc
对 结构 RECT
的引用,标识源。
返回值
如果成功,则不为零;否则为 0。
注解
有关详细信息,请参阅 StretchBlt Windows SDK。
CImage::TransparentBlt
将位图从源设备上下文复制到此当前设备上下文。
代码语言:javascript复制BOOL TransparentBlt(
HDC hDestDC,
int xDest,
int yDest,
int nDestWidth,
int nDestHeight,
UINT crTransparent = CLR_INVALID) const throw();
BOOL TransparentBlt(
HDC hDestDC,
const RECT& rectDest,
UINT crTransparent = CLR_INVALID) const throw();
BOOL TransparentBlt(
HDC hDestDC,
int xDest,
int yDest,
int nDestWidth,
int nDestHeight,
int xSrc,
int ySrc,
int nSrcWidth,
int nSrcHeight,
UINT crTransparent = CLR_INVALID) const throw();
BOOL TransparentBlt(
HDC hDestDC,
const RECT& rectDest,
const RECT& rectSrc,
UINT crTransparent = CLR_INVALID) const throw();
参数
hDestDC
目标设备上下文的句柄。
xDest
目标矩形左上角的 x 坐标(以逻辑单位为单位)。
yDest
目标矩形左上角的 y 坐标(以逻辑单位为单位)。
nDestWidth
目标矩形的宽度(以逻辑单位为单位)。
nDestHeight
目标矩形的高度(以逻辑单位为单位)。
crTransparent
要视为透明的源位图中的颜色。 默认情况下,指示当前设置为图像的透明颜色 CLR_INVALID
的颜色应该使用。
rectDest
对 结构 RECT 的引用,标识目标。
xSrc
源矩形左上角的 x 坐标(以逻辑单位为单位)。
ySrc
源矩形左上角的 y 坐标(以逻辑单位为单位)。
nSrcWidth
源矩形的宽度(以逻辑单位为单位)。
nSrcHeight
源矩形的高度(以逻辑单位为单位)。
rectSrc
对 结构 RECT
的引用,标识源。
返回值
TRUE
如果成功,为 ;否则为 FALSE
。
注解
TransparentBlt
每个像素 4 位和 8 位的源位图支持 。 使用 CImage::AlphaBlend 指定透明每像素 32 位位图。
示例
代码语言:javascript复制// Performs a transparent blit from the source image to the destination
// image using the images' current transparency settings
BOOL TransparentBlt(CImage* pSrcImage, CImage* pDstImage,
int xDest, int yDest, int nDestWidth, int nDestHeight)
{
HDC hDstDC = NULL;
BOOL bResult;
if(pSrcImage == NULL || pDstImage == NULL)
{
// Invalid parameter
return FALSE;
}
// Obtain a DC to the destination image
hDstDC = pDstImage->GetDC();
// Perform the blit
bResult = pSrcImage->TransparentBlt(hDstDC, xDest, yDest, nDestWidth, nDestHeight);
// Release the destination DC
pDstImage->ReleaseDC();
return bResult;
}
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/147410.html原文链接:https://javaforall.cn