加载,显示和保存图像- Windows C DLL

本教程展示了如何在C/ c++ Windows API应用程序中使用LEADTOOLS SDK加载、显示和保存图像。

概述
总结 本教程介绍如何在Windows C DLL应用程序中加载、显示和保存图像。
完成时间 30分钟
Visual Studio项目 下载教程项目(18kb)
平台 Windows C DLL应用程序
IDE Visual Studio 2017, 2019
开发许可 下载LEADTOOLS

所需的知识

在开始之前加载,显示和保存图像- Windows C DLL本教程中,通过回顾添加引用和设置License教程。

创建项目并添加LEADTOOLS引用

中创建的64位Windows API项目的副本添加引用和设置License教程。如果项目不可用,请按照该教程中的步骤创建它。

为了加载、显示和保存图像,LEADTOOLS需要额外的dll。也可以通过打开预编译的头文件添加所需的库pch.hstdafx.h根据所使用的Visual Studio版本,并添加以下行:

#pragma comment (lib,“C: \ \ LEADTOOLS22 \ \ Lib \ \ CDLL \ \ x64 \ \ Ltfil_x.lib”//文件加载和保存#pragma comment (lib,“C: \ \ LEADTOOLS22 \ \ Lib \ \ CDLL \ \ x64 \ \ Ltdis_x.lib”//图像显示

请注意

有关应用程序需要哪些DLL文件的完整列表,请参阅你的申请所包含的文件

设置License文件

许可证解锁项目所需的特性。它必须在调用任何工具箱函数之前设置。有关详细信息,包括针对不同平台的教程,请参阅设置运行时License

有两种类型的运行时许可证:

请注意

中更详细地介绍了添加LEADTOOLS引用和设置许可添加引用和设置License教程。

添加加载位图代码

现在已经添加了LEADTOOLS引用并设置了许可证,可以开始编码了。

以下步骤适用于Visual Studio 2019;对于Visual Studio的其他版本,它们可能有所不同。

解决方案资源管理器双击资源文件(.rc)

资源文件

展开资源树中的菜单,双击菜单资源,在设计器界面中打开。

菜单资源在设计器中打开它

的空项中退出项,单击并键入状态.将新项目拖到上面退出.这将导致该项的ID变为ID_FILE_OPEN

拖动新项目以设置其ID

转到项目的主CPP文件,其中包含指向()函数用于主窗口。在靠近顶部的全局变量中添加以下声明:

BITMAPHANDLE LEADBmp;

导航到指向函数和开关(wmId)表述,就是下面的WM_COMMANDCase,添加一个新的Case:

开关(wmId)情况下ID_FILE_OPEN:TCHAR szFileName[260] = TEXT("");//文件名称如果= GetBitmapLoadingName(hWnd, szFileName, ARRAYSIZE(szFileName)))打破如果(LEADBmp.Flags.Allocated)L_FreeBitmap (&LEADBmp);L_LoadBitmap (szFileName &LEADBmp,运算符(LEADBmp), 24, ORDER_BGR, NULL, NULL);InvalidateRect(hWnd, NULL, TRUE);打破//保留其余的代码

GetBitmapLoadingName ()函数可以是填充szFileName变量,使用有效的映像文件名(如果需要,包括完整路径)。要显示文件打开对话框获取文件名,添加如下代码:

GetBitmapLoadingName(HWND HWND, tsar * pszFileName, DWORD nLen)OPENFILENAME OPENFILENAME = {0};OpenFileName。lStructSize =运算符(OpenFileName);OpenFileName。hwndOwner = hwnd;OpenFileName。lpstrFile = pszFileName;OpenFileName。nMaxFile = nLen;OpenFileName。lpstrFilter = TEXT(“所有\ 0 *。* \ * . jpg jpeg \ 0 \ 0”);OpenFileName。nFilterIndex = 1;OpenFileName。lpstrFileTitle = NULL;OpenFileName。nMaxFileTitle = 0;OpenFileName。lpstrInitialDir = NULL;OpenFileName。Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;//显示File Open对话框如果(! 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的绘图代码…RECT rc = {0,0, BITMAPWIDTH(&LEADBmp), BITMAPHEIGHT(&LEADBmp)};如果(LEADBmp.Flags.Allocated)L_PaintDC(hdc, &LEADBmp, NULL, NULL, &rc, NULL, SRCCOPY);EndPaint (hWnd, ps);打破

重要提示

本教程中的加载代码强制图像以每像素24位的速度加载,这意味着加载后它将没有调色板。如果需要显示每像素1到8位之间的图像,则必须在绘制代码中处理调色板,如的代码示例所示L_PaintDC

添加保存位图代码

添加一个保存菜单项下的文件菜单。方法中的步骤类似添加位图加载代码部分,但将菜单项文本设置为并保存而不是状态,这将导致新项的ID为ID_FILE_SAVE

指向函数,和下开关(wmId)语句的下面WM_COMMANDCase,添加一个新的Case:

开关(wmId)情况下ID_FILE_SAVE:如果(LEADBmp.Flags.Allocated !)对话框(hWnd,文本(不能救”。未加载图像”),文本(“LEADTOOLS演示”), MB_ICONERROR);打破TCHAR szFileName[260] = TEXT("");//文件名称如果= GetBitmapSavingName(hWnd, szFileName, ARRAYSIZE(szFileName)))打破L_SaveBitmap(szFileName, &LEADBmp, FILE_JPEG_411, 24,15, NULL);打破//保留其余的代码

GetBitmapSavingName ()函数可以是填充szFileName变量,使用有效的映像文件名(如果需要,包括完整路径)。要显示文件保存对话框获取文件名,添加如下代码:

GetBitmapSavingName(HWND HWND, TCHAR* pszFileName, DWORD nLen)OPENFILENAME OPENFILENAME = {0};OpenFileName。lStructSize =运算符(OPENFILENAME);OpenFileName。hwndOwner = hwnd;OpenFileName。lpstrFilter = TEXT(“Jpeg \ * . jpg 0 \ 0”);OpenFileName。lpstrFile = pszFileName;OpenFileName。nMaxFile = nLen;OpenFileName。lpstrDefExt = TEXT(“jpg”);OpenFileName。lpstrFileTitle = NULL;OpenFileName。nMaxFileTitle = 0;OpenFileName。lpstrInitialDir = NULL;OpenFileName。Flags = OFN_OVERWRITEPROMPT;//显示文件保存对话框如果(! GetSaveFileName (&OpenFileName))返回失败;返回成功;

重要提示

上面的代码将图像保存为24位JPEG格式。若要保存其他类型,请传递不同的值而不是FILE_JPEG_411.详情见图像格式帮助主题。

运行项目

按下运行项目F5,或选择调试->开始调试

如果正确地遵循了这些步骤,应用程序应该运行,并允许用户在机器上加载LEADTOOLS编解码器过滤器支持的任何图像。图像将显示在主窗口中。按下保存菜单项将显示的图像另存为JPEG格式,保存在使用保存对话框

总结

本教程介绍了如何添加必要的dll来加载、显示和保存图像。它还涵盖了如何使用BITMAPHANDLE的结构L_LoadBitmapL_SaveBitmapL_PaintDC而且L_FreeBitmap功能。

另请参阅

iOS
188金宝搏的网址客服|支持|联系我们|知识产权公告
©1991 - 2023领德科技有限公司版权所有。