65.9K
CodeProject 正在变化。 阅读更多。
Home

CPJAImage - 又一个图像绘制类

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.98/5 (22投票s)

2001年12月15日

CPOL

4分钟阅读

viewsIcon

238505

downloadIcon

5570

一个具有各种选项的图片绘制类 - 透明、禁用或灰度、居中或拉伸以适应给定矩形。

Sample Image - PJAImage.jpg

更新

2003年8月23日 - 修复了透明绘制错误

引言

在我编写了 CFileEditCtrl 编辑控件后,我收到一个请求,要求在浏览按钮上放置一个图像,然后又一个请求要求使控件变得扁平并对鼠标热响应。这成了一个相当艰巨的任务,我在本站和 www.codeguru.com 上搜索绘制代码,以绘制图像,无论是位图还是图标,无论是正常绘制还是透明绘制,无论是灰度化还是禁用,可能拉伸或至少居中在按钮上。因此,在找到一些解决了部分问题(但并非我想要的)的代码后,我将它们组合起来,填补了缺失的部分,并创建了 CPJAImage 类。虽然我编写这个类的原因是用于浏览按钮,但我认为不把它作为另一个独立的图像渲染类分享给大家是很可惜的。

致谢

Jean-Edouard Lachand-Robert 感谢他提供的 DitherBlt() 函数。

Paul Reynolds 感谢他提供的“True Mask”透明功能。

感谢 Zafir AnjumGuy Gascoigne 提供的灰度算法。

使用 CPJAImage 类

第一步是将 PJAImage.hPJAImage.cpp 文件包含到您的项目中。然后,在以正常方式加载或创建您的位图或图标对象后,使用 SetImage() 函数将其选择到 CPJAImage 对象中。

CBitmap Bitmap;
Bitmap.LoadBitmap(IDB_BITMAP1);
CPJAImage PJAImage;
PJAImage.SetImage(Bitmap, PJAI_BITMAP);

然后,当您准备好绘制图像时,使用 DrawImage() 函数将图像绘制到给定的设备上下文中。

PJAImage.DrawImage(pDC, left, top, width, height, DrawFlags);

您在 DrawImage() 函数中指定的绘制标志决定了图像如何绘制。

用户函数

CPJAImage::CPJAImage()

类构造函数创建一个空的 CPJAImage 对象。

CPJAImage::~CPJAImage()

类析构函数销毁图像句柄

void CPJAImage::DrawImage(CDC *pToDC, int x, int y, int w, int h, DWORD DrawFlags = 0)

DrawImage() 执行实际的绘制操作。

参数

pToDC 指向要将图像绘制到的设备上下文的指针。
x 要绘制图像的边界矩形的左侧
边界矩形的顶部
w 边界矩形的宽度
h 边界矩形的高度
DrawFlags 用于控制绘制的标志

在 DrawFlags 参数中使用的标志

PJAI_CENTERED

将图像居中绘制在提供的矩形上。如果图像大于矩形,它将被裁剪。此标志不能与 PJAI_STRETCHED 标志一起使用。
PJAI_STRETCHED 绘制图像,使其填充提供的矩形。位图使用 StretchBlt() API 函数拉伸。图标使用 DrawIconEx() API 函数拉伸。此标志不能与 PJAI_CENTERED 标志一起使用。
PJAI_DISABLED 将图像绘制为禁用状态(3D 单色)。此标志不能与 PJAI_GRAYSCALE 标志一起使用。
PJAI_GRAYSCALE 将图像绘制为灰度。此标志不能与 PJAI_DISABLED 标志一起使用。
PJAI_TRANSPARENT 透明绘制图像。如果未通过 SetTransparentColor() 函数指定透明颜色,则使用图像左上角(GetPixel(0, 0))的颜色作为透明颜色。此标志对图标无效,因为图标默认就是透明的。

CSize CPJAImage::GetSize()

返回一个 CSize 对象,该对象包含当前 CPJAImage 中图像的大小。

BOOL CPJAImage::SetImage(HANDLE hImage, DWORD Flags)

将提供的图像选择到 CPJAImage 对象中。如果成功选择提供的图像,则返回 TRUE,否则返回 FALSE

参数

hImage 图像的 HANDLE,可以是 HBITMAP(DIB 或 DDB)或 HICON
标志 指定图像的标志。

SetImage() 函数使用的标志

PJAI_BITMAP 给定的句柄是 HBITMAP
PJAI_ICON 给定的句柄是 HICON
PJAI_AUTODELETE 当设置新图像或删除 CPJAImage 对象时,将删除给定的句柄并释放内存。如果未设置此标志,则此类的用户负责在不再需要句柄时释放图像句柄。

COLORREF CPJAImage::SetTransparentColor(COLORREF clr = CLR_DEFAULT)

设置要用作位图图像透明颜色的颜色。返回先前的透明颜色。如果将 CLR_DEFAULT (0xFF000000) 设置为透明颜色,则使用左上角像素(GetPixel(0, 0))的颜色作为透明颜色。

参数

clr 透明颜色

演示应用程序

请务必查看演示应用程序,以实际了解 CPJAImage 类。虽然演示应用程序中有一个预加载的图像,但您可以将您喜欢的图片文件(*.ico, *.bmp, *.jpg, 或 *.gif)拖放到演示应用程序上。

要更改透明颜色,请单击 设置颜色 按钮,然后使用鼠标从显示的图片中选择颜色。

尽情享用!

© . All rights reserved.