CImage 类

CImage 类CImage提供增强的位图支持,包括加载和保存采用JPEG、GIF、BMP和可移植网络图形格式的图像(PNG)格式。说明无法在Windows运行时中执行的应用程序中使用此类及其成员。语法classCImage成员公共构造函数公共构造函数 “属性” 说明 CImage::CImage 构造函数。 公共方法公共方法 “属性” 说明 CImage::AlphaBlend 显示具有透明或半透明像素的位图。 CImage:.

大家好,又见面了,我是你们的朋友全栈君。

CImage 提供增强的位图支持,包括加载和保存采用 JPEG、GIF、BMP 和可移植网络图形格式的图像 (PNG) 格式

说明

无法在 Windows 运行时中执行的应用程序中使用此类及其成员。

语法

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 节位图附加到 对象,但不能使用以下仅支持 CImageAttach DIB 节 CImage 位图的方法:

若要确定附加位图是否为 DIB 部分,请调用 IsDibSection 。

 备注

在 Visual Studio .NET 2003 中,此类保留所创建对象 CImage 数的计数。 每当计数为 0 时,都会自动调用 函数,以释放 GdiplusShutdown GDI+。 这可确保始终正确销毁由 DLL 直接或间接创建的任何对象,并且 CImageGdiplusShutdown 不会从 调用 DllMain 这些对象。

 备注

不建议 CImage 在 DLL 中使用全局对象。 如果需要在 DLL 中使用全局对象,请调用 显式释放由 CImageCImage::ReleaseGDIPlus GDI+。

CImage 无法选择到新的 CDC 中。 CImage 为映像 HDC 创建其自己的 。 因为一次只能选择一个 ,所以不能将与 关联的 HBITMAPHDCHBITMAPCImage 选定到另一个 HDC 中。 如果需要 , CDC 请从 中 HDC 检索 CImage ,并赋予 CDC::FromHandle 。

示例

// 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 指针。 如果要与此类函数(如 )一起使用 , CImageCMenu::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

显示具有透明或半透明像素的位图。

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 值放置在目标 bBlendOpAC_SRC_OVER 位图上。

CImage::Attach

附加到 hBitmapCImage 对象。

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

将位图从源设备上下文复制到此当前设备上下文。

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 中使用全局对象,请调用 显式释放由 CImageCImage::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 位未使用。

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

将位图从源设备上下文复制到当前设备上下文。

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

检索指向位图中给定像素的实际位值的指针。

void* GetBits() throw();

返回值

指向位图缓冲区的指针。 如果位图是从下向上的 DIB,则指针指向靠近缓冲区末尾的位置。 如果位图是自上而下的 DIB,则指针指向缓冲区的第一个字节。

注解

使用此指针以及 返回的值 GetPitch ,可以查找和更改图像中的单个像素。

 备注

此方法仅支持 DIB 节位图;因此,访问对象的像素的方式与访问 DIB 节的像素 CImage 的方式相同。 返回的指针指向 0,0 (位置的像素) 。

CImage::GetBPP

检索每像素位数值。

int GetBPP() const throw();

返回值

每个像素的位数。

注解

此值确定定义每个像素的位数和位图中的最大颜色数。

每个像素的位数通常为 1、4、8、16、24 或 32。 有关 biBitCount 此值 BITMAPINFOHEADER Windows请参阅 Windows SDK 中的 成员。

CImage::GetColorTable

从 DIB 部分调色板中的 (中检索) RGB 的红色、绿色、蓝色和 RGB 值。

void GetColorTable(
    UINT iFirstColor,
    UINT nColors,
    RGBQUAD* prgbColors) const throw();

参数

iFirstColor
要检索的第一个条目的颜色表索引。

nColors
要检索的颜色表条目数。

prgbColors
指向用于检索颜色 RGBQUAD 表条目的结构数组的指针。

CImage::GetDC

检索当前已选择图像的设备上下文。

HDC GetDC() const throw();

返回值

设备上下文的句柄。

注解

每次调用 GetDC 时,都必须对 进行后续调用 ReleaseDC 。

CImage::GetExporterFilterString

查找可用于保存图像的图像格式。

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 扩展名的文件。

例如:

//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 &#124; excludeEMF &#124; 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 分隔符”\0″。

CImage::GetHeight

检索图像的高度(以像素为单位)。

int GetHeight() const throw();

返回值

图像的高度(以像素为单位)。

CImage::GetImporterFilterString

查找可用于加载图像的图像格式。

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 ,并接受列表中任何其他导出程序支持的任何扩展名的文件。

例如:

//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 &#124; excludeEMF &#124; 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

检索颜色表中的最大项数。

int GetMaxColorTableEntries() const throw();

返回值

颜色表中的条目数。

注解

此方法仅支持 DIB 节位图。

CImage::GetPitch

检索图像的间距。

int GetPitch() const throw();

返回值

图像的间距。 如果返回值为负,则位图为下边距 DIB,其原点为左下角。 如果返回值为正,则位图为自顶向下的 DIB,其原点为左上角。

注解

螺距是两个内存地址之间的距离(以字节为单位),表示一个位图行的开头和下一个位图行的开头。 由于螺距以字节为单位进行测量,因此图像的间距有助于确定像素格式。 螺距还可以包括为位图预留的额外内存。

使用 GetPitch with GetBits 查找图像的各个像素。

 备注

此方法仅支持 DIB 节位图。

CImage::GetPixel

检索 x 和 y指定的位置处的像素颜色。

COLORREF GetPixel(int x, int y) const throw();

参数

x
像素的 x 坐标。

y
像素的 y 坐标。

返回值

像素的红色、绿色、蓝色 (RGB) 值。 如果像素在当前剪辑区域外,则返回值为 CLR_INVALID 。

CImage::GetPixelAddress

检索像素的确切地址。

void* GetPixelAddress(int x, int y) throw();

参数

x
像素的 x 坐标。

y
像素的 y 坐标。

注解

根据像素的坐标、位图的间距和每个像素的位数确定地址。

对于每个像素小于8位的格式,此方法返回包含像素的字节的地址。 例如,如果图像格式具有每个像素4位的,则 GetPixelAddress 返回字节中第一个像素的地址,并且必须计算每个字节2个像素。

 备注

此方法仅支持 DIB 节位图。

CImage::GetTransparentColor

检索调色板中透明颜色的索引位置。

LONG GetTransparentColor() const throw();

返回值

透明颜色的索引。

CImage::GetWidth

检索图像的宽度(以像素为单位)。

int GetWidth() const throw();

返回值

位图的宽度(以像素为单位)。

CImage::IsDIBSection

确定附加位图是否为 DIB 部分。

bool IsDIBSection() const throw();

返回值

TRUE 如果附加位图是 DIB 节,则为。 否则为 FALSE

注解

如果位图不是 DIB 部分,则不能使用以下 CImage 仅支持 DIB 节位图的方法:

CImage::IsIndexed

确定位图的像素是否映射到调色板。

bool IsIndexed() const throw();

返回值

TRUE 如果已编制索引,否则为 FALSE 。

注解

TRUE仅当位图为8位 (256 颜色) 或更低时,此方法才会返回。

 备注

此方法仅支持 DIB 节位图。

CImage::IsNull

确定当前是否已加载位图。

bool IsNull() const throw();

注解

TRUE如果当前未加载位图,此方法将返回; 否则返回 FALSE 。

CImage::IsTransparencySupported

指示应用程序是否支持透明位图。

static BOOL IsTransparencySupported() throw();

返回值

如果当前平台支持透明度,则为非零值。 否则为0。

注解

如果返回值不为零,并且支持透明度,则对 AlphaBlend 、或的调用 TransparentBltDraw 将处理透明颜色。

CImage::Load

加载图像。

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

使用指定的掩码和光栅操作合并源位图和目标位图的颜色数据。

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

执行从源设备上下文中的矩形到目标设备上下文中的并行四边形的位块传输。

复制

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

释放设备上下文。

void ReleaseDC() const throw();

注解

由于一次只能在设备上下文中选择一个位图,因此每次调用 ReleaseDC 时都必须调用 GetDC 。

CImage::ReleaseGDIPlus

释放由资源GDI+。

void ReleaseGDIPlus() throw();

注解

必须调用此方法以释放由全局对象分配 CImage 的资源。 请参阅 CImage::CImage

CImage::Save

将映像保存到磁盘上的指定流或文件中。

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 颜色值。

void SetColorTable(
    UINT iFirstColor,
    UINT nColors,
    const RGBQUAD* prgbColors) throw();

参数

iFirstColor
要设置的第一个条目的颜色表索引。

nColors
要设置的颜色表项数。

prgbColors
指向结构数组 RGBQUAD 的指针,用于设置颜色表条目。

注解

此方法仅支持 DIB 节位图。

CImage::SetPixel

设置位图中给定位置的像素的颜色。

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

将给定索引位置处的颜色设置为透明。

LONG SetTransparentColor(LONG iTransparentColor) throw();

参数

iTransparentColor
要设置为透明的颜色的调色板中的索引。 如果为 -1,则不将颜色设置为透明。

返回值

以前设置为透明的颜色的索引。

CImage::StretchBlt

将位图从源设备上下文复制到此当前设备上下文。

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

将位图从源设备上下文复制到此当前设备上下文。

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 位位图。

示例

// 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;
}

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/147410.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 一个喜欢研究车的80后开车人,自己的经验和感受英语_开老车的年轻人

    一个喜欢研究车的80后开车人,自己的经验和感受英语_开老车的年轻人1. 白色车,安全系数最高。       澳大利亚研究者新近发布调查报告,黑色汽车在白天与黑夜的事故率均高居榜首。在白天,黑色汽车比白色汽车事故率高12%,在黎明前和黄昏后则高47%。       特别是傍晚的时候,远处跑来一辆黑色轿车,总感觉像穿了隐形衣,我还是比较喜欢白色车,总是很显眼。在民间还有一种说法,白色汽车油耗低,原因是车…

  • stringtokenizer java,Java中的StringTokenizer「建议收藏」

    stringtokenizer java,Java中的StringTokenizer「建议收藏」Java中的StringTokenizerjava.util.StringTokenizer类允许您将字符串分成令牌。这是打破字符串的简单方法。它没有提供区分数字,带引号的字符串,标识符等的功能,例如StreamTokenizer类。我们将在I/O一章中讨论StreamTokenizer类。StringTokenizer类的构造方法StringTokenizer类中定义了3个构造函数。Constr…

  • EasyBoot用户名注册码

    EasyBoot用户名注册码用户名:中华人民共和国注册码:2898-5448-5603-BB2D

  • 数据库连接池怎么实现_java数据库连接池原理

    数据库连接池怎么实现_java数据库连接池原理数据库连接池1.数据库连接池是干什么的假如我们有个应用程序需要每隔10秒查询一次数据库,我们可以用以下方式方法1:每次查询的时候都新建一个数据库连接,查询结束关闭数据库连接。由于数据库连接的建立是一个非常耗费资源的过程,所以这种每次都新建连接的方式非常浪费资源,不可取。方法2:在最开始的新建一个数据库连接,后续过程中一直使用这个数据库连接进行查询,直到最后关

  • ubuntu16.04修改用户名和密码_网络设置的用户名和密码

    ubuntu16.04修改用户名和密码_网络设置的用户名和密码1、修改密码(1)进入Ubuntu,打开终端,输入:sudosu转为root用户;(2)输入:sudopasswduser(user是对应的用户名);(3)输入新密码,确认密码;(4)修改密码成功,重启,输入新密码进入Ubuntu;2、修改主机名(1)修改hostname文件输入:sudovim/etc/hostname,把旧主机名修改为新主机名;(2)修改hosts文件输入:sudovim/etc/hosts,把旧主机名修…

  • django详解_java cookie

    django详解_java cookie前言cookie:在网站中,http请求是无状态的。也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户。cookie的出现就是为了解决这个问题,第一次登录

发表回复

您的电子邮箱地址不会被公开。

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