本教程展示如何使用LEADTOOLS SDK在Windows C DLL应用程序中使用覆盖在主图像上绘制图像。
概述 | |
---|---|
总结 | 本教程介绍如何在Windows C DLL应用程序中使用图像叠加。 |
完成时间 | 20分钟 |
Visual Studio项目 | 下载教程项目(33kb) |
平台 | Windows C DLL应用程序 |
IDE | Visual Studio 2017, 2019 |
开发许可 | 下载LEADTOOLS |
步骤,熟悉创建项目和加载/显示图像的基本步骤添加引用和设置License而且加载、显示和保存图像教程,在工作之前添加和显示图像叠加- Windows C DLL教程。
中创建的项目的副本开始加载、显示和保存图像教程。如果您没有该项目,请按照该教程中的步骤创建它。
使用LEADTOOLS加载图像作为覆盖,您不需要任何额外的库加载、显示和保存图像教程,如下所示:
//添加你想要预编译的头文件
#定义LTV22_CONFIG
# include“C: \ LEADTOOLS22 \ \ L_Bitmap.h包括”//使用安装LEADTOOLS的实际路径
#pragma comment (lib,“C: \ \ LEADTOOLS22 \ \ Lib \ \ CDLL \ \ x64 \ \ Ltkrn_x.lib”)
#pragma comment (lib,“C: \ \ LEADTOOLS22 \ \ Lib \ \ CDLL \ \ x64 \ \ Ltfil_x.lib”)//文件加载和保存
#pragma comment (lib,“C: \ \ LEADTOOLS22 \ \ Lib \ \ CDLL \ \ x64 \ \ Ltdis_x.lib”)//图像显示
请注意
有关应用程序需要哪些DLL文件的完整列表,请参阅你的申请中包含的文件.
许可证解锁项目所需的特性。它必须在调用任何工具箱功能之前设置。有关详细信息,包括针对不同平台的教程,请参阅设置运行时License.
有两种类型的运行时许可证:
请注意
中更详细地介绍了添加LEADTOOLS引用和设置许可添加引用和设置License教程。
创建了项目、添加了引用、设置了许可证以及加载、显示和保存图像教程添加,编码可以开始。
以下步骤适用于Visual Studio 2019;对于Visual Studio的其他版本,它们可能有所不同。
在解决方案资源管理器,双击资源文件(.rc)。
添加一个新的覆盖的下拉菜单文件菜单和帮助菜单。在新增的覆盖菜单,添加加载图像为叠加&1菜单项。新项目的ID应该是ID_OVERLAYS_LOADIMAGEASOVERLAY1
.
去指向
函数,和下开关(wmId)
语句的下面WM_COMMAND
Case,添加一个新的CaseID_OVERLAYS_LOADIMAGEASOVERLAY1
.首先,在我们加载覆盖之前,我们必须检查是否加载了主图像,因为没有它我们不能使用覆盖。检查LEADBmp
的旗帜。分配
属性查看是否已加载。
将下面的代码添加到ID_OVERLAYS_LOADIMAGEASOVERLAY1
案例加载叠加图像,并将其添加到主图像。
创建一个TCHAR
字符串来保存正在加载的文件名。复制GetBitmapLoadingName ()
方法。ID_FILE_OPEN
Case并将字符串和字符串的大小传递给它。这将允许用户选择一个文件作为覆盖。创建一个BITMAPHANDLE
命名OverlayBmp
并加载图像L_LoadBitmap ()
.
情况下ID_OVERLAYS_LOADIMAGEASOVERLAY1:
{
如果(LEADBmp.Flags。分配= =假){
对话框(hWnd,文本("你必须先载入主图像"),文本(“LEADTOOLS演示”), MB_ICONERROR);
打破;
}
TCHAR szFileName[260] = TEXT("");//文件名称
如果= GetBitmapLoadingName(hWnd, szFileName, ARRAYSIZE(szFileName)))
打破;
BITMAPHANDLE OverlayBmp;
intnret = L_LoadBitmap(szFileName, &OverlayBmp,运算符(OverlayBmp), 0, ORDER_BGR, NULL, NULL);
如果(OverlayBmp。BitsPerPixel != 1) {
对话框(hWnd,文本(“覆盖图像必须为1bpp”),文本(“LEADTOOLS演示”), MB_ICONERROR);
L_FreeBitmap (&OverlayBmp);
打破;
}
如果(OverlayBmp。高度!= LEADBmp。高度|| OverlayBmp。宽度!= LEADBmp.Width) {
对话框(hWnd,文本(叠加图像必须与主位图大小相同),文本(“LEADTOOLS演示”), MB_ICONERROR);
L_FreeBitmap (&OverlayBmp);
打破;
}
//如果位图的大小与LEADBmp相同,则替换当前的OverlayBmp是安全的
nret = l_seoverlaybitmap (&LEADBmp, 0, &OverlayBmp, OVERLAY_MOVE);
//获取已存在的Overlay属性
OVERLAYATTRIBUTES属性= {0};
nret = L_GetOverlayAttributes(&LEADBmp, 0, &attributes,运算符(0 xff OVERLAYATTRIBUTES));
//改变覆盖颜色为蓝色
属性。crColor = 0x00FF0000;
//设置覆盖更新在L_PaintDC和当主图像被操作,如滚动或缩放
属性。uFlags = OVERLAY_AUTOPAINT | OVERLAY_AUTOPROCESS;
//设置颜色和标志属性
nret = L_SetOverlayAttributes(&LEADBmp, 0, &attributes, 0x06);
//立即更新显示
InvalidateRect(hWnd, NULL, TRUE);
//这是必要的,因为OVERLAY_MOVE创建了一个它单独处理的OverlayBmp的副本
如果(OverlayBmp.Flags.Allocated)
L_FreeBitmap (&OverlayBmp);
}
打破;
导航回资源文件(.rc)。在下面添加另一个菜单项覆盖命名加载图像为叠加&2.新项目的ID应该是ID_OVERLAYS_LOADIMAGEASOVERLAY2
.这将允许我们加载第二个覆盖,我们可以分配不同的属性。
回到指向
函数,在开关(wmId)
语句,为之添加大小写ID_OVERLAYS_LOADIMAGEASOVERLAY2
.将下面的代码添加到ID_OVERLAYS_LOADIMAGEASOVERLAY2
情况下添加第二个覆盖,但这一次将在属性中分配颜色为绿色。
情况下ID_OVERLAYS_LOADIMAGEASOVERLAY2:
{
如果(LEADBmp.Flags。分配= =假){
对话框(hWnd,文本("你必须先载入主图像"),文本(“LEADTOOLS演示”), MB_ICONERROR);
打破;
}
TCHAR szFileName[260] = TEXT("");//文件名称
如果= GetBitmapLoadingName(hWnd, szFileName, ARRAYSIZE(szFileName)))
打破;
BITMAPHANDLE OverlayBmp;
intnret = L_LoadBitmap(szFileName, &OverlayBmp,运算符(OverlayBmp), 0, ORDER_BGR, NULL, NULL);
如果(OverlayBmp。BitsPerPixel != 1) {
对话框(hWnd,文本(“覆盖图像必须为1bpp”),文本(“LEADTOOLS演示”), MB_ICONERROR);
L_FreeBitmap (&OverlayBmp);
打破;
}
如果(OverlayBmp。高度!= LEADBmp。高度|| OverlayBmp。宽度!= LEADBmp.Width) {
对话框(hWnd,文本(叠加图像必须与主位图大小相同),文本(“LEADTOOLS演示”), MB_ICONERROR);
L_FreeBitmap (&OverlayBmp);
打破;
}
//如果位图的大小与LEADBmp相同,那么替换当前的OverlayBmp是安全的
nret = l_seoverlaybitmap (&LEADBmp, 1, &OverlayBmp, OVERLAY_MOVE);
//获取已存在的Overlay属性
OVERLAYATTRIBUTES属性= {0};
nret = L_GetOverlayAttributes(&LEADBmp, 1, &attributes,运算符(0 xff OVERLAYATTRIBUTES));
//改变覆盖颜色为绿色
属性。crColor = 0x0000FF00;
//设置覆盖更新在L_PaintDC和当主图像被操作,如滚动或缩放
属性。uFlags = OVERLAY_AUTOPAINT | OVERLAY_AUTOPROCESS;
//设置颜色和标志属性
nret = L_SetOverlayAttributes(&LEADBmp, 1, &attributes, 0x06);
//立即更新显示
InvalidateRect(hWnd, NULL, TRUE);
//这是必要的,因为OVERLAY_MOVE创建了一个它单独处理的OverlayBmp的副本
如果(OverlayBmp.Flags.Allocated)
L_FreeBitmap (&OverlayBmp);
}
按下运行项目F5,或选择Debug ->开始调试.
如果正确地执行了这些步骤,应用程序将运行。请按照以下步骤进行测试:
最后,单击加载图像为叠加2,并选择与主图相同大小的另一张1BPP图像。该图像将为每个像素显示绿色,调色板索引为1。这些叠加在内部由相同的位图句柄分别处理。
出于测试目的,您可以使用示例文件在这里.
本教程介绍了如何在位图查看器上设置图像叠加而不改变图像数据。