从缓冲区加载图像- Windows C DLL

本教程展示如何创建一个C/ c++ Windows API应用程序,从缓冲区加载图像。

概述
总结 本教程介绍如何从Windows C DLL应用程序中的缓冲区加载图像。
完成时间 30分钟
Visual Studio项目 下载教程项目(20kb)
平台 Windows C DLL应用程序
IDE Visual Studio 2017, 2019
开发许可 下载LEADTOOLS
用另一种语言试试

所需的知识

在开始之前从缓冲区加载图像- Windows C DLL教程,熟悉创建项目和加载图像的基本步骤添加引用和设置License而且加载、显示和保存图像教程。

创建项目并添加LEADTOOLS引用

中创建的64位Windows API项目的副本加载、显示和保存图像教程。如果项目不可用,请按照该教程中的步骤创建它。

所需的LEADTOOLS库文件从缓冲区加载图像的教程与已有的教程类似加载、显示和保存图像教程。验证预编译的头文件(或pch.hstdafx.h)包含以下行:

#定义LTV22_CONFIG# include“C: \ LEADTOOLS22 \ \ L_Bitmap.h包括”//使用安装LEADTOOLS的实际路径#pragma comment (lib,“C: \ \ LEADTOOLS22 \ \ Lib \ \ CDLL \ \ x64 \ \ Ltkrn_x.lib”#pragma comment (lib,“C: \ \ LEADTOOLS22 \ \ Lib \ \ CDLL \ \ x64 \ \ Ltfil_x.lib”//文件加载和保存#pragma comment (lib,“C: \ \ LEADTOOLS22 \ \ Lib \ \ CDLL \ \ x64 \ \ Ltdis_x.lib”//图像显示

请注意

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

本教程使用Microsoft CryptoAPI解码包含图像的Base64缓冲区,因此在预编译的头文件中添加以下行:

#pragma comment (lib,“Crypt32.lib”//链接CryptoAPI DLL

设置License文件

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

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

请注意

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

从缓冲区代码中添加加载图像

随着项目的创建、引用的添加、许可证的设置和加载图像代码的添加,编码就可以开始了。

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

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

控件中添加两个新菜单项文件菜单开放菜单项如下。

项文本 项ID
&从缓冲区加载 ID_FILE_LOADFROMBUFFER
加载&Base64编码 ID_FILE_LOADBASE64ENCODED

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

开关(wmId)情况下ID_FILE_LOADFROMBUFFER://从内存缓冲区加载图像LoadFromBuffer (hWnd, L_FALSE);打破情况下ID_FILE_LOADBASE64ENCODED://解码内存缓冲区然后加载图像LoadFromBuffer (hWnd, L_TRUE);打破//保留其余的代码

的代码LoadFromBuffer ()函数。
如果布尔参数bEncodedBase64真正的,该函数将缓冲区视为base64编码,并在加载图像之前对其进行解码。

L_INT LoadFromBuffer(HWND HWND, L_BOOL bEncodedBase64)TCHAR szFileName[260] = TEXT("");//文件名称如果= GetBitmapLoadingName(hWnd, szFileName, ARRAYSIZE szFileName))返回ERROR_NORMAL_ABORT;文件* fp = NULL;_ttfopen_s (&fp, szFileName, TEXT(“rb”));如果(fp)返回ERROR_FILENOTFOUND;fseek(fp, 0L, SEEK_END);nfilesystem = ftell(fp);fseek(fp, 0L, SEEK_SET);L_UCHAR* pBufferFile =L_UCHAR [nFileSize];如果= fread_s(pBufferFile, nFileSize, 1, nFileSize, fp))如果(fp)文件关闭(fp);如果(pBufferFile)删除[] pBufferFile;返回ERROR_FILE_READ;L_UCHAR* pBufferImage = NULL;L_UCHAR* pBufferDecoded = NULL;如果(bEncodedBase64)//必须解码文件来获取图像DWORD dwDecodedSize = 0;CryptStringToBinaryA((LPCSTR)pBufferFile, nFileSize, CRYPT_STRING_BASE64_ANY, NULL, &dwDecodedSize, NULL, NULL);pBufferDecoded =L_UCHAR [dwDecodedSize];CryptStringToBinaryA((LPCSTR)pBufferFile, nFileSize, CRYPT_STRING_BASE64_ANY, pBufferDecoded, &dwDecodedSize, NULL, NULL);pBufferImage = pBufferDecoded;其他的//不需要解码pBufferImage = pBufferFile;对话框(hWnd,文本("文件已载入内存缓冲区。试图从缓冲区加载图像.."),文本(“LEADTOOLS演示”), MB_ICONINFORMATION);如果(LEADBmp.Flags.Allocated)L_FreeBitmap (&LEADBmp);L_INT nRet = L_LoadBitmapMemory(pBufferImage, &LEADBmp,运算符LEADBmp, 24, ORDER_BGR, nFileSize, NULL, NULL);InvalidateRect(hWnd, NULL, TRUE);如果(fp)文件关闭(fp);如果(pBufferFile)删除[] pBufferFile;如果(pBufferDecoded)删除[] pBufferDecoded;返回nRet;

运行项目

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

如果正确地执行了这些步骤,应用程序将运行并允许用户选择要加载到内存缓冲区中的文件。如果文件中的图像使用Base64编码,则提供一个选项来解码数据以从中获得图像。为了测试这个选项,这个base64编码的映像文件可以使用。

总结

本教程介绍如何使用L_LoadBitmapMemory函数从内存缓冲区加载图像,直接或在需要时解码它们。

另请参阅

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