Seite 1 von 1
[gelöst][DX9] Create Texture from URL
Verfasst: 19.08.2011, 17:31
von D3DX
Hallo,
leider gibt es in Directx(9) die Funktion "D3DXCreateTextureFromURL" nicht.
Ich möchte in meinem Prog eine Textur aus einer nicht lokal gespeicherten Grafikdatei erzeugen.
Gibt es hierfür bereits eine lizensfreie lib, die dieses unterstützt.
Google spuckt zwar einige 'media' libs raus, aber unter features kann man nicht direkt erkennen, ob das Lesen einer url unterstützt wird.
Deshalb meine Frage, ob ihr eine Idee habt, womit ich das o.g. Vorhaben realisieren könnte.
Marco
Re: [DX9] Create Texture from URL
Verfasst: 19.08.2011, 18:15
von EyDu
Hallo.
Da du eh unter Windows arbeitest, würde ich einfach den Umweg über `URLDownloadToFile` gehen. Da ich mich mit der ganzen Windows API ehrlich gesagt überhaupt nicht auskenne, würde ich an der entsprechenden Stelle in der Dokumentation noch nach Varianten Suchen. Sicher gibt es auch irgend etwas zum laden in den Speicher und zum sychronen/asynchronen Aufruf der Funktion.
Sebastian
Re: [DX9] Create Texture from URL
Verfasst: 19.08.2011, 18:48
von D3DX
Habe noch weiter nach einer Lösung gesucht und denke, daß ich den libCurl-Weg gehen werde,
um das Image lokal auf die Platte zu speichern.
Dann weiter mit der bekannten Funktion D3DXCreateTextureFromFile.
Hier noch mein Fund aus dem web:
Init
Code: Alles auswählen
#pragma comment (lib, "libcurl.lib")
#include <curl/curl.h>
// callback function writes data to a std::ostream
static size_t data_write(void* buf, size_t size, size_t nmemb, void* userp)
{
if(userp)
{
std::ostream& os = *static_cast<std::ostream*>(userp);
std::streamsize len = size * nmemb;
if(os.write(static_cast<char*>(buf), len))
return len;
}
return 0;
}
// timeout is in seconds
CURLcode curl_read(const std::string& url, std::ostream& os, long timeout = 30)
{
CURLcode code(CURLE_FAILED_INIT);
CURL* curl = curl_easy_init();
if(curl)
{
if(CURLE_OK == (code = curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &data_write))
&& CURLE_OK == (code = curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L))
&& CURLE_OK == (code = curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L))
&& CURLE_OK == (code = curl_easy_setopt(curl, CURLOPT_FILE, &os))
&& CURLE_OK == (code = curl_easy_setopt(curl, CURLOPT_TIMEOUT, timeout))
&& CURLE_OK == (code = curl_easy_setopt(curl, CURLOPT_URL, url.c_str())))
{
code = curl_easy_perform(curl);
}
curl_easy_cleanup(curl);
}
return code;
}
// Image URL
std::string urlImage = "http://knowingallah.com/media/Images/asrar_alkwn/clip_image014.jpg";
Start Download
Code: Alles auswählen
curl_global_init(CURL_GLOBAL_ALL);
std::ofstream ofs("output.jpg", std::ostream::binary);
if(CURLE_OK == curl_read(urlImage, ofs))
{
// Image successfully written to file
// Create Texture from file now
}
curl_global_cleanup();
Danke schön
Marco
Re: [gelöst][DX9] Create Texture from URL
Verfasst: 19.08.2011, 22:57
von dot
libcurl mag eine Lösung sein. Aber da du dich sowieso schon auf Windows beschränkst, kannst du doch auch gleich die entsprechende Funktionalität der
WinAPI benutzen und dir so die Abhängigkeit von libcurl sparen...