本教程展示了如何加载,显示和保存图像使用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功能。