加载,显示和保存图像- 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评论(自由,“C: \ \ LEADTOOLS21 \ \ Lib \ \ CDLL \ \ x64 \ \ Ltfil_x.lib”//文件加载和保存# pragma评论(自由,“C: \ \ LEADTOOLS21 \ \ 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:char szFileName[260] = TEXT("");/ /文件名如果= GetBitmapLoadingName(hWnd, szFileName,运算符(szFileName)))打破如果(LEADBmp.Flags.Allocated)L_FreeBitmap (&LEADBmp);L_LoadBitmap (szFileName &LEADBmp,运算符(LEADBmp), 24, ORDER_BGR, NULL, NULL);InvalidateRect (hWnd, NULL,真的);打破//保持代码的其余部分不变

GetBitmapLoadingName ()函数可以是任何函数szFileName变量,该变量具有有效的图像文件名(如果需要,包括完整路径)。显示一个文件打开对话框获取文件名,添加以下代码:

GetBitmapLoadingName(HWND HWND, TCHAR* pszFileName, DWORD nLen)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。Flags = 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的绘图代码…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);打破char szFileName[260] = TEXT("");/ /文件名如果= GetBitmapSavingName(hWnd, szFileName,运算符(szFileName)))打破L_SaveBitmap(szFileName, &LEADBmp, FILE_JPEG_411, 24,15, NULL);打破//保持代码的其余部分不变

GetBitmapSavingName ()函数可以是任何函数szFileName变量,该变量具有有效的图像文件名(如果需要,包括完整路径)。显示一个文件保存对话框获取文件名,添加以下代码:

GetBitmapSavingName(HWND HWND, TCHAR* pszFileName, DWORD nLen)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_LoadBitmapL_SaveBitmapL_PaintDC而且L_FreeBitmap功能。

另请参阅

net
iOS
188金宝搏的网址客服|支持|联系我们|知识产权的通知
©1991 - 2021领先的技术公司。保留所有权利。