Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding > Coding Tutorials
You last visited: Today at 16:52

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



DirectX11 Image Loader from Memory (with Image Links )

Discussion on DirectX11 Image Loader from Memory (with Image Links ) within the Coding Tutorials forum part of the General Coding category.

Reply
 
Old   #1

 
StackOverflowed's Avatar
 
elite*gold: 18
Join Date: Dec 2024
Posts: 23
Received Thanks: 4
DirectX11 Image Loader from Memory (with Image Links )

ImageLoader.h
Code:
#ifndef IMAGE_LOADER_HPP
#define IMAGE_LOADER_HPP

#if _HAS_CXX17
#include <string_view>
#else
#include <string>
#endif

#include <d3d11.h>

class ImageLoader {
public:
#if _HAS_CXX17
	using string_t = std::string_view;
#else
	using string_t = const std::string&;
#endif

	ImageLoader() = default;
	ImageLoader(ID3D11Device* dx_device, string_t image_url);
	~ImageLoader();

	/* Same as ImageLoader constructor just might be called later */
	void initialize(ID3D11Device* dx_device, string_t image_url);

	/* Get image instance */
	ID3D11ShaderResourceView* image() const noexcept;

private:;
	ID3D11ShaderResourceView* m_image;
};

#endif

ImageLoader.cpp
Code:
#include "ImageLoader.h"

#include <Windows.h>
#include <wininet.h>
#include <vector>
#include <stdexcept>
#include <memory>
#include <d3dx11.h>

#pragma comment(lib, "d3dx11.lib")
#pragma comment(lib, "wininet.lib")

#define MAX_FILESIZE_TO_READ 4096

ImageLoader::ImageLoader(ID3D11Device* dx_device, string_t image_url) : m_image(nullptr)
{
	if (m_image != nullptr)
		return;

	initialize(dx_device, image_url);
}

ImageLoader::~ImageLoader() {}

void ImageLoader::initialize(ID3D11Device* dx_device, string_t image_url)
{
	if (m_image != nullptr)
		return;

	std::unique_ptr<std::remove_pointer_t<HINTERNET>, decltype(&InternetCloseHandle)>
		hInternet(InternetOpenA("ImGui ImageLoader", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0), InternetCloseHandle);

	if (!hInternet) {
		throw std::runtime_error("InternetOpenA failed");
	}

	std::unique_ptr<std::remove_pointer_t<HINTERNET>, decltype(&InternetCloseHandle)>
		hURL(InternetOpenUrlA(hInternet.get(), image_url.data(), NULL, 0, INTERNET_FLAG_RELOAD, 0), InternetCloseHandle);

	if (!hURL) {
		throw std::runtime_error("InternetOpenUrl failed");
	}

	std::vector<BYTE> image_data;
	std::vector<BYTE> buffer(MAX_FILESIZE_TO_READ); // Why the heap and not the stack? Because that's the way i want it.
	DWORD bytes_read = 0;
	while (InternetReadFile(hURL.get(), buffer.data(), MAX_FILESIZE_TO_READ, &bytes_read) && bytes_read > 0) {
		image_data.insert(image_data.end(), buffer.data(), buffer.data() + bytes_read);
	}

	D3DX11_IMAGE_LOAD_INFO image_load_info;
	ID3DX11ThreadPump* thread_pump{ nullptr };
	HRESULT hr = D3DX11CreateShaderResourceViewFromMemory(dx_device, image_data.data(), image_data.size(), &image_load_info, thread_pump, &m_image, 0);
	if (FAILED(hr)) {
		throw std::runtime_error("D3DX11CreateShaderResourceViewFromMemory failed");
	}
}

ID3D11ShaderResourceView* ImageLoader::image() const noexcept
{
	return m_image;
}

Usage example:
Code:
static ImageLoader cs2(Images::image_device9, "https://cdn2.steamgriddb.com/icon_thumb/331a046af78255a2d0642af437bc9d22.png");

ImGui::Image((PVOID)cs2.image());
StackOverflowed is offline  
Old 08/27/2025, 14:19   #2
 
elite*gold: 0
Join Date: Nov 2010
Posts: 1
Received Thanks: 0
wow ,cool with some images can upload to server , the client can do without the files!
yehuan is offline  
Old 08/27/2025, 14:26   #3

 
StackOverflowed's Avatar
 
elite*gold: 18
Join Date: Dec 2024
Posts: 23
Received Thanks: 4
Quote:
Originally Posted by yehuan View Post
wow ,cool with some images can upload to server , the client can do without the files!
Exactly!
StackOverflowed is offline  
Reply

Tags
dx11 image


Similar Threads Similar Threads
CoD: Ghosts Directx11 Fehler
12/08/2013 - Technical Support - 2 Replies
Hey, immer wenn ich CoD:Ghosts starten will kommt da eine Fehlermeldung:Schwerwiegender Directx11 Fehler. Grafikkarte:NVIDIA Geforce GT 425M 4GB Ram
C++ DirectX11 help/hilfe
11/16/2013 - C/C++ - 4 Replies
Hallo, ich da mal ein Problem, ich habe /oder arbeite immernoch an einen c++ /direct x11 buch,doch an einer stelle bin ich einmal verzweifelt doch dann hab ich mir einfach von der website von denen die source gedownloaded.Alles gut klapte auch alles aber dann, wechselte ich meinen rechner und jetzt will das nicht mehr. Die exe wird zwar erstellt arber irgendwie will das nicht ,nach dem ich mir den mal den Runlog durchgeguckt habe,habe ich gemerkt das mein Directx nicht will hier mal der...
BF3 DirectX11 Fehler +Firefox Absturz
07/03/2013 - Battlefield - 2 Replies
Hallo Leute ! Ich habe ein Problem mit BF3 und DirectX 11 Ich spiele einen kurzen moment BF3 und dann kommt dieser Fehler: Directupload.net - 2ynu8n9h.jpg Gleichzeitig stürtzt dann Firefox ab! Dazu habe ich leider kein Bild. Kann das vielleicht an der Übertaktung liegen ?
Hidden chronicles 50 xp links 50 energy links 50 clue links 50 coins link
03/26/2012 - Facebook - 0 Replies
removed
[HILFE]Directx11 PLS WICHTIG!
07/29/2011 - Technical Support - 5 Replies
Also mein Problem ist folgendes Ich will directx11 deinstallieren und dann wieder installieren aber ich finde keine Isntallation für Windows 7 von directx11 ?? Nur vista und hab jetz angst wenn ich das Deinsalliere dann nicht wieder installieren kann?? Könnte mir da einer schnell helfen hab auch gegooglet aber immer wiede rnur für Vista die installation gefunden...



All times are GMT +1. The time now is 16:53.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.