负载、显示和保存图像- C Windows DLL

本教程展示了如何加载,显示和保存图像使用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教程中,熟悉的基本步骤,创建一个项目通过审查添加引用和设置一个许可证教程。

创建项目并添加LEADTOOLS引用

开始的一个副本64位Windows API创建的项目添加引用和设置一个许可证教程。如果项目不可用,按照这个教程中的步骤创建它。

为了负载,显示和保存图像,LEADTOOLS需要额外的dll。通过打开预编译头文件添加所需的库,pch.hstdafx.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

把新的项目设置它的ID

项目的主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_PaintDCL_FreeBitmap功能。

另请参阅

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