拟合图像到窗口

为了使图像适合窗口,您只需要计算一个适合窗口客户区域的显示矩形,同时保留图像的纵横比。以下来自EZFUNC示例程序的代码片段展示了如何做到这一点。(此示例代码包括一些调色板处理,在处理面板更改).

变量声明:

/*全局声明矩形rWndSize;/* RECT用于设置窗口大小。* /矩形rClientSize;/* RECT为客户区。* /矩形rLeadDest;/* RECT用于绘制的目标矩形。* /矩形rLeadSource;/* RECT用于绘制源矩形。* /HPALETTE hpalPaint;/*油漆面板手柄。* /BITMAPHANDLE LeadBitmap;/*加载图像的位图句柄。* /L_INT DisplayWidth, DisplayHeight;/*显示图像的尺寸*//*消息处理函数中的局部声明PAINTSTRUCT ps;用于处理WM_PAINT消息的结构HPALETTE = NULL;/*当前系统面板的临时副本*/HDC HDC;/*与面板函数一起使用的设备上下文*/intAdjustedWidth AdjustedHeight;/*调整窗口尺寸*/

设置矩形的代码:

在消息处理函数的这段代码中,位图(LeadBitmap)已加载,但尚未显示。

/*获取当前窗口大小和客户区域*/GetWindowRect (hWnd, &rWndSize);GetClientRect (hWnd, &rClientSize);/*使用这个用户定义的函数来适应客户区显示的图像。* /(rClientSize.right,/*允许的宽度*/rClientSize.bottom,/*允许高度*/BITMAPWIDTH (&LeadBitmap),/*宽度因子,用于纵横比*/BITMAPHEIGHT (&LeadBitmap),/*高因子,用于纵横比*/空,/*结果左值,未使用*/空,/*结果顶部值,不使用*/&DisplayWidth,/*结果宽度值*/&DisplayHeight);/*结果高度值*//*调整窗口大小以删除右侧或底部的空白*/adjusttedwidth = rWndSize。right - rWndSize。- rClientSize.right;adjuststedheight = rWndSize。bottom - rWndSize。- rClientSize.bottom;MoveWindow (hWnd, rWndSize。离开了,rWndSize。top, adjustdwidth, adjuststedheight, FALSE);/*获取调整后窗口的客户端区域*/GetClientRect (hWnd, &rClientSize);/*使绘制的目标矩形与客户区相同*/rLeadDest = rClientSize;/*设置源矩形使用整个位图*/SetRect(&rLeadSource, 0,0, LeadBitmap。宽度,LeadBitmap.Height);

绘制图像的代码:

情况下WM_PAINT:/*获取设备上下文句柄*/hdc = BeginPaint (hWnd, &ps);如果(LeadBitmap.Flags.Allocated)/*我们有图像吗?* /如果(hpalPaint)/*如果我们有一个调色板,选择它*/hPalette = SelectPalette (hdc, hpalPaint, FALSE);/*如果不处理WM_QUERYNEWPALETTE */,则取消注释/* RealizePalette (hdc);* //*绘制图像*/L_PaintDC (hdc&LeadBitmap,&rLeadSource,/*源矩形*/空,/*默认源剪辑区域*/&rLeadDest,/*目标矩形*/&ps.rcPaint,/*由WM_PAINT */设置的Dest剪辑SRCCOPY);/*普通油漆*/如果(hpalPaint)/*返回旧的调色板*/SelectPalette (hdc, hPalette, FALSE);EndPaint (hWnd, &ps);/*返回DC */返回(0);

计算显示矩形的局部函数:

参数

WidthAllowed

最大宽度。

HeightAllowed

最大高度。

WidthFactor

为了保持纵横比,通常是位图宽度。

HeightFactor

为了保持纵横比,通常是位图高度。

* ResultLeft

如果不关心居中,则传递NULL。否则,它将使用X偏移量进行更新。

* ResultTop

如果不关心居中,则传递NULL。否则,将用Y偏移量进行更新。

* ResultWidth

要更新的宽度变量的地址。

* ResultHeight

要更新的高度变量地址。

笔记:使用此函数将显示的图像贴合到特定的空间,同时保留纵横比。

无效CalcDisplay (L_INT宽度允许,L_INT高度允许,L_INT的宽度因子,L_INT的高度因子,L_INT *ResultLeft, L_INT *ResultTop,L_INT *ResultWidth, L_INT *ResultHeight)/*计算结果的局部变量*/L_INT左,顶部,宽度,高度;/*查看是否使用最大宽度会使图像太高*/如果(MulDiv(WidthAllowed, hightfactor, WidthFactor) < hightallows)/*使用最大宽度,计算高度和顶部值*/左= 0;宽度= WidthAllowed;高度= MulDiv(宽度,hightfactor, WidthFactor);Top = (hightallows - Height) / 2;其他的/*使用最大高度,并计算宽度和左侧值*/Top = 0;高度=允许高度;宽度= MulDiv(高度,WidthFactor, hightfactor);Left = (WidthAllowed - Width) / 2;/*如果调用者没有传递NULL */,则更新顶部和左侧的结果如果(ResultTop != NULL)*ResultTop = Top;如果(ResultLeft != NULL)*ResultLeft =左;/*更新宽度和高度结果*/*ResultWidth =宽度;*ResultHeight =身高;返回

栅格成像C API帮助
188金宝搏的网址客服|支持|联系我们|知识产权公告
©1991 - 2021领德科技有限公司版权所有。