簡體   English   中英

如何使用C ++在wxWidgets中顯示來自互聯網的圖像?

[英]How to show an image from internet in wxWidgets by c++?

我添加了一個wxStaticBitmap我通過形式作出wxFormBuilder上:

show_image = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );

如何使用C ++和Curl在其上顯示基於Internet的圖像? 例如,這樣的圖像:

https://www.google.com/images/srpr/logo4w.png

 #include <string> 
 #include <iostream> 
 #include <wx/string.h> 
 #include <wx/image.h> 
 #include <curl/curl.h> 
 struct MemoryStruct {                                                  
     char *memory;  
     size_t read_pos; 
     size_t size;  
 };  
 static size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp) 
 {                                                                      
     register int realsize = size * nmemb;                              
     struct MemoryStruct *mem = (struct MemoryStruct *)userp;           
     mem->memory = (char *)realloc(mem->memory, mem->size + realsize + 1);    
     if (mem->memory) {                                                 
         memcpy(&(mem->memory[mem->size]), contents, realsize);         
         mem->size += realsize;    
         mem->memory[mem->size] = 0;                                    
     }    
     return realsize;  
 }  
 wxImage *DownloadImage(string image_url) 
 { 
     wxImage *pImg = NULL; 
     struct MemoryStruct chunk; 
     CURL* curlCtx = curl_easy_init(); 
     curl_easy_setopt(curlCtx, CURLOPT_URL, image_url.c_str()); 
     curl_easy_setopt(curlCtx, CURLOPT_WRITEDATA, (void *)&chunk); 
     curl_easy_setopt(curlCtx, CURLOPT_WRITEFUNCTION, WriteCallback); 
     curl_easy_setopt(curlCtx, CURLOPT_FOLLOWLOCATION, 1); 
     chunk.memory=NULL;  
     chunk.size = 0;  
     CURLcode rc = curl_easy_perform(curlCtx); 
      if (rc) 
     { 
         printf("!!! Failed to download\n"); 
     } 
   wxMemoryInputStream *memin = new wxMemoryInputStream(chunk.memory, chunk.size); 
     if((pImg = new wxImage()) != NULL){ 
         if(!pImg->LoadFile(*memin, wxBITMAP_TYPE_JPEG)){ 
             delete pImg; 
             pImg = NULL; 
         } 
     } 
     curl_easy_cleanup(curlCtx); 
     return pImg; 
 } 
 wxImage imagewx = *DownloadImage("https://www.google.com/images/srpr/logo4w.png"); 
 if(imagewx.IsOk()){ 
     show_image->SetBitmap(wxBitmap(imagewx)); 
 } 

我不確定這是否正確,但對我有用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM