一. 起因
学到图像处理的课程时,需要做个软件。
而对于处理的图像,我们希望用户可以提供自定义的图片,所以有这个需求。
二. 解决(注意,是UE框架下的C++)
!!!需要在项目.Build.cs添加 “DesktopPlatform”,“ApplicationCore” 两个模块
Build失败大部分是因为模块加载问题,不是你include头文件就行了,具体原因请了解UE的模块机制。
代码如下
#include "DesktopPlatformModule.h"
#include "Windows/WindowsWindow.h"
TArray<FString> UPhBlueprintFunctionLibrary::OpenImageFile()
{
//选中文件路径
TArray<FString> Path;
//过滤文件类型
const FString FileType = TEXT("图像文件 (*bmp;*.jpg;*.jpeg;*.png)|*bmp;*.jpg;*.jpeg;*.png");
//文件选择窗口默认路径
const FString DefaultPath = FPaths::ConvertRelativePathToFull(FPaths::ProjectDir());
//获得支持的平台
IDesktopPlatform* DesktopPlatform = FDesktopPlatformModule::Get();
//获得句柄
const TSharedPtr<FGenericWindow> NativeWindow = GEngine->GameViewport->GetWindow()->GetNativeWindow();
const auto Window = static_cast<FWindowsWindow*>(NativeWindow.Get());
const auto Hwnd = Window->GetHWnd();
//打开窗口
DesktopPlatform->OpenFileDialog(Hwnd, TEXT("导入图片"), DefaultPath, TEXT(""), *FileType, EFileDialogFlags::Multiple, Path);
return Path ;
}
UPhBlueprintFunctionLibrary 自定义的工具类。
FileType |前是显示给用户的文本,|后是需要的文件类型。
DesktopPlatform 不同平台。
NativeWindow 当前窗口。
EFileDialogFlags 控制单选/多选文件。
Path 此次窗口选择的所有文件的路径。
效果如图
三. 感想
调用文件夹 真是非常非常重要的一件事,不是因为实现它的难易程度,
而是它真的是 我写软件的灵魂所在,它意味着我的程序可以使用用户提供的文件,
不再是单个单个字符的输入,再默默的输出。
这在以前是不能想象的,它的出现,使得我就像井底之蛙看到了大海,萤火瞥见了皓月。
是那种,整日的迷茫,到一瞬间的豁然开朗。
自定义,实在是一件美妙的事情!!!
可惜同学不能怎么get到我的点…
emmm
下篇再说怎么使用得到的文件路径读取图片数据~~~