CImage 类

时间:2022-10-31
本文章向大家介绍CImage 类,主要内容包括语法、成员、公共方法、公共运算符、注解、示例、要求、CImage::AlphaBlend、返回值、注解、CImage::Attach、注解、CImage::BitBlt、返回值、注解、CImage::CImage、CImage::Create、返回值、CImage::CreateEx、返回值、示例、CImage::Destroy、CImage::Detach、CImage::Draw、返回值、注解、CImage::GetBits、注解、CImage::GetBPP、注解、CImage::GetColorTable、CImage::GetDC、注解、CImage::GetExporterFilterString、返回值、注解、CImage::GetHeight、CImage::GetImporterFilterString、注解、CImage::GetMaxColorTableEntries、注解、CImage::GetPitch、注解、CImage::GetPixel、返回值、CImage::GetPixelAddress、注解、CImage::GetTransparentColor、CImage::GetWidth、CImage::IsDIBSection、注解、CImage::IsIndexed、注解、CImage::IsNull、CImage::IsTransparencySupported、注解、CImage::Load、返回值、注解、CImage::LoadFromResource、注解、CImage::MaskBlt、返回值、注解、CImage::operator HBITMAP、CImage::PlgBlt、返回值、注解、CImage::ReleaseDC、CImage::ReleaseGDIPlus、CImage::Save、返回值、注解、CImage::SetColorTable、注解、CImage::SetPixel、注解、CImage::SetPixelIndexed、CImage::SetPixelRGB、注解、CImage::SetTransparentColor、返回值、CImage::StretchBlt、返回值、注解、CImage::TransparentBlt、返回值、注解、示例、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

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

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 中的 。

pointDestPOINT 个 结构,指示目标矩形的左上角。

nDestWidth 目标矩形的宽度(以逻辑单位为单位)。

nDestHeight 目标矩形的高度(以逻辑单位为单位)。

xSrc 源矩形左上角的逻辑 x 坐标。

ySrc 源矩形左上角的逻辑 y 坐标。

rectDest 指示 RECT 目标矩形的 结构。

pointSrcPOINT 个 结构,指示源矩形的左上角。

返回值

如果成功,则不为零,否则为零。

注解

有关详细信息,请参阅 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('|'));

参数

strExportersCSimpleString 对象的引用。 有关详细信息,请参阅备注。

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 分隔符”″。

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('|'));

参数

strImportersCSimpleString 对象的引用。 有关详细信息,请参阅备注。

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

检索 xy指定的位置处的像素颜色。

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 的引用,标识目标。

pointSrcPOINT 个 结构,指示源矩形的左上角。

pointMaskPOINT 个 结构,指示掩码位图的左上角。

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 的引用,该结构指定源矩形的坐标。

pointMaskPOINT 个 结构,指示掩码位图的左上角。

返回值

如果成功,则不为零;否则为 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;
}

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