LoadImage在C++多线程中的应用

   2024-09-30 9390
核心提示:LoadImage 是一个Windows API函数,用于从文件或资源中加载图像(如位图、图标或光标)以下是一个简单的示例,展示了如何在C++多

LoadImage 是一个Windows API函数,用于从文件或资源中加载图像(如位图、图标或光标)

以下是一个简单的示例,展示了如何在C++多线程应用程序中使用LoadImage

#include<iostream>#include<thread>#include<vector>#include<windows.h>void load_image(const std::wstring& file_path) {    HANDLE hFile = CreateFile(file_path.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);    if (hFile == INVALID_HANDLE_VALUE) {        std::cerr << "Error opening file: "<< file_path<< std::endl;        return;    }    DWORD file_size = GetFileSize(hFile, NULL);    if (file_size == INVALID_FILE_SIZE) {        std::cerr << "Error getting file size: "<< file_path<< std::endl;        CloseHandle(hFile);        return;    }    HANDLE hMapping = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 1, NULL);    if (!hMapping) {        std::cerr << "Error creating file mapping: "<< file_path<< std::endl;        CloseHandle(hFile);        return;    }    void* data = MapViewOfFile(hMapping, FILE_MAP_READ, 0, 0, 1);    if (!data) {        std::cerr << "Error mapping view of file: "<< file_path<< std::endl;        CloseHandle(hMapping);        CloseHandle(hFile);        return;    }    HBITMAP hBitmap = LoadImage(NULL, file_path.c_str(), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);    if (!hBitmap) {        std::cerr << "Error loading image: "<< file_path<< std::endl;    } else {        std::cout << "Image loaded successfully: "<< file_path<< std::endl;    }    UnmapViewOfFile(data);    CloseHandle(hMapping);    CloseHandle(hFile);}int main() {    std::vector<std::wstring> image_files = {L"image1.bmp", L"image2.bmp", L"image3.bmp"};    std::vector<std::thread> threads;    for (const auto& file : image_files) {        threads.emplace_back(load_image, file);    }    for (auto& thread : threads) {        thread.join();    }    return 0;}

这个示例中,我们创建了一个名为load_image的函数,它接受一个包含图像文件路径的宽字符串。然后,我们在主函数中创建了一个线程向量,并为每个图像文件启动一个新线程来加载图像。最后,我们等待所有线程完成。

请注意,这个示例仅适用于Windows平台。如果你需要在其他平台上实现类似的功能,你可能需要使用其他库或API。

 
举报打赏
 
更多>同类物流大全
推荐图文
推荐物流大全
点击排行

网站首页  |  关于我们  |  联系方式网站留言    |  赣ICP备2021007278号