如何通过 c++ 在 wxWidgets 中显示来自互联网的图像
How to show an image from internet in wxWidgets by c++?
我在wxFormBuilder制作的表单上添加了一个wxStaticBitmap
:
show_image = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
如何使用C++和 Curl 在其上显示基于互联网的图像?例如,像这样的图像:
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 downloadn");
}
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));
}
我不确定这是正确的方法,但它对我有用
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 平均图像时图像损坏
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- Vulkan验证层不断在VkQueuePresentKHR()上抛出图像布局错误
- esp8266互联网交换机问题
- 使用FFMPEG将RGB图像序列保存到.mp4时出现问题
- 将RGB图像保存为PPM格式
- 将图像添加到资源文件夹UWP C++
- 彩色图像的卤化物处理平均值
- C++射线示踪剂ppm表示没有足够的数据来显示图像
- 重新定位图像时如何前进到下一个内存块
- 如何使用按钮更新GTK3图像以使用C++从相机捕获图片
- 为什么 BMP 图像上的 imwrite 会卡住/不返回?
- Gstreamer:每 5 秒使用多文件墨水保存图像/jpeg
- 如何使用CImg打开图像?
- 如何通过 c++ 在 wxWidgets 中显示来自互联网的图像