本教程展示了如何加载,显示和保存图像使用LEADTOOLS SDK在C / c++ Windows API的应用程序。
概述 | |
---|---|
总结 | 本教程介绍了如何加载,显示和保存图片在Windows C应用程序DLL。 |
完成时间 | 30分钟 |
Visual Studio项目 | 下载教程项目(18 KB) |
平台 | Windows C DLL应用程序 |
IDE | Visual Studio 2017中,2019年 |
开发许可 | 下载LEADTOOLS |
在工作之前负载、显示和保存图像- C Windows DLL教程中,熟悉的基本步骤,创建一个项目通过审查添加引用和设置一个许可证教程。
开始的一个副本64位Windows API创建的项目添加引用和设置一个许可证教程。如果项目不可用,按照这个教程中的步骤创建它。
为了负载,显示和保存图像,LEADTOOLS需要额外的dll。通过打开预编译头文件添加所需的库,pch.h
或stdafx.h
根据使用Visual Studio版本,并添加以下行:
# pragma评论(自由,“C: \ \ LEADTOOLS22 \ \ Lib \ \ CDLL \ \ x64 \ \ Ltfil_x.lib”)/ /文件加载和保存
# pragma评论(自由,“C: \ \ LEADTOOLS22 \ \ Lib \ \ CDLL \ \ x64 \ \ Ltdis_x.lib”)/ /图像显示
请注意
对于一个完整的列表的应用程序所需的DLL文件,请参考文件包含在您的应用程序。
许可解锁项目需要的特性。它必须设置工具箱函数被调用之前。详情,包括教程为不同的平台,请参考设置一个运行时许可。
有两种类型的运行时许可证:
请注意
添加LEADTOOLS引用和设置许可中会详细介绍添加引用和设置一个许可证教程。
现在添加了LEADTOOLS引用和许可,可以开始编码。
下面的步骤是针对Visual Studio 2019;他们可以为其他版本的Visual Studio是不同的。
去解决方案资源管理器双击资源文件(.rc)
扩大在资源树菜单,双击菜单资源designer界面中打开它。
下面的空项退出项,点击和类型状态。拖动上面的新项目退出。这将导致项目的IDID_FILE_OPEN
。
项目的主CPP文件,其中包含的指向()
主窗口函数。添加以下声明全局变量顶部:
BITMAPHANDLE LEADBmp;
导航到指向
功能和下开关(wmId)
声明中,这是以下WM_COMMAND
情况下,添加一个新的情况:
开关(wmId)
{
情况下ID_FILE_OPEN:
{
TCHAR szFileName[260] =文本(”“);/ /文件名
如果(成功! = GetBitmapLoadingName (hWnd, szFileName ARRAYSIZE (szFileName)))
打破;
如果(LEADBmp.Flags.Allocated)
L_FreeBitmap (&LEADBmp);
L_LoadBitmap (szFileName &LEADBmp,运算符ORDER_BGR (LEADBmp), 24日,空,空);
InvalidateRect (hWnd, NULL,真的);
}
打破;
/ /把剩下的代码
的GetBitmapLoadingName ()
函数可以是任何功能,填补了szFileName
变量与一个有效的图像文件的名字(包括完整路径,如果需要的话)。显示一个文件打开对话框获取文件名称,添加以下代码:
TCHAR * pszFileName L_INT GetBitmapLoadingName (HWND HWND, DWORD nLen)
{
OPENFILENAME OPENFILENAME = {0};
OpenFileName。lStructSize =运算符(OpenFileName);
OpenFileName。hwndOwner = hwnd;
OpenFileName。lpstrFile = pszFileName;
OpenFileName。nMaxFile = nLen;
OpenFileName。lpstrFilter =文本(“所有\ 0 *。* \ * . jpg jpeg \ 0 \ 0”);
OpenFileName。nFilterIndex = 1;
OpenFileName。lpstrFileTitle =零;
OpenFileName。nMaxFileTitle = 0;
OpenFileName。lpstrInitialDir =零;
OpenFileName。旗帜= OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
/ /显示文件打开对话框
如果(! GetOpenFileName (&OpenFileName))
返回失败;
返回成功;
}
每当一个图像分配一个BITMAPHANDLE
结构,程序员必须调用L_FreeBitmap
当它不再需要自由。自加载位图分配这样一个形象,电话LEADBmp.Flags.Allocated
在退出前检查应用程序。
修改处理WM_DESTROY
在指向()
功能成为:
情况下WM_DESTROY:
如果(LEADBmp.Flags.Allocated)
L_FreeBitmap (&LEADBmp);
PostQuitMessage (0);
打破;
修改处理WM_PAINT
在指向()
功能成为:
情况下WM_PAINT:
{
PAINTSTRUCT ps;
HDC HDC = BeginPaint (hWnd, ps);
/ / TODO:添加任何绘图代码使用hdc这里……
矩形rc = {0, 0, BITMAPWIDTH (&LEADBmp) BITMAPHEIGHT (&LEADBmp)};
如果(LEADBmp.Flags.Allocated)
L_PaintDC (rc hdc &LEADBmp,空,空,空,SRCCOPY);
EndPaint (hWnd, ps);
}
打破;
重要提示
本教程中的代码加载力加载图像每像素24位,这意味着它不会有调色板后它被加载。如果需要显示图像1 - 8位/像素,面板必须处理这幅画代码的代码示例所示L_PaintDC。
添加一个保存菜单项下文件菜单。要做到这一点,使用类似的步骤添加位图加载代码上面部分,但设置菜单项文本并保存而不是状态,这将导致新的项目的IDID_FILE_SAVE
。
去指向
功能和下开关(wmId)
下面的语句WM_COMMAND
情况下,添加一个新的情况:
开关(wmId)
{
情况下ID_FILE_SAVE:
{
如果(LEADBmp.Flags.Allocated !)
{
对话框(hWnd,文本(不能救”。没有图像加载”),文本(“LEADTOOLS演示”),MB_ICONERROR);
打破;
}
TCHAR szFileName[260] =文本(”“);/ /文件名
如果(成功! = GetBitmapSavingName (hWnd, szFileName ARRAYSIZE (szFileName)))
打破;
L_SaveBitmap (szFileName &LEADBmp FILE_JPEG_411, 24日,15日,NULL);
}
打破;
/ /把剩下的代码
的GetBitmapSavingName ()
函数可以是任何功能,填补了szFileName
变量与一个有效的图像文件的名字(包括完整路径,如果需要的话)。显示一个文件保存对话框获取文件名称,添加以下代码:
TCHAR * pszFileName L_INT GetBitmapSavingName (HWND HWND, DWORD nLen)
{
OPENFILENAME OPENFILENAME = {0};
OpenFileName。lStructSize =运算符(OPENFILENAME);
OpenFileName。hwndOwner = hwnd;
OpenFileName。lpstrFilter =文本(“Jpeg \ * . jpg 0 \ 0”);
OpenFileName。lpstrFile = pszFileName;
OpenFileName。nMaxFile = nLen;
OpenFileName。lpstrDefExt =文本(“jpg”);
OpenFileName。lpstrFileTitle =零;
OpenFileName。nMaxFileTitle = 0;
OpenFileName。lpstrInitialDir =零;
OpenFileName。旗帜= OFN_OVERWRITEPROMPT;
/ /显示文件保存对话框
如果(! GetSaveFileName (&OpenFileName))
返回失败;
返回成功;
}
重要提示
上面的代码保存24位JPEG的形象。为了节省其他类型,通过不同的值,而不是
FILE_JPEG_411
。的更多细节LEADTOOLS图像格式帮助主题。
按运行项目F5,或通过选择调试- >开始调试。
如果遵循正确的步骤,应用程序应该运行,让用户负载机器上的任何图像LEADTOOLS编解码器支持的过滤器。图像将显示在主窗口。按下保存菜单项保存显示图像的JPEG使用指定的输出位置保存对话框。
本教程介绍了如何添加必要的dll加载,显示和保存图像。它还介绍了如何使用BITMAPHANDLE
结构与L_LoadBitmap
,L_SaveBitmap
,L_PaintDC
和L_FreeBitmap
功能。