2012-04-11 7 views
2

サーバー(Webサイト)からイメージをダウンロードして回転バックグラウンドイメージを設定しようとしていますが、これを行うのに0成功しました。私のコードの(短縮された)バージョンは以下の通りです。私は間違いを犯していませんが、私はこのイメージを私の背景として表示するために「一時的に」どのように保存しますか?イメージ(型変数)なのか何か?サーバーからイメージをダウンロードする(cUrl、提案を受け取ります)C++

これは単なる学習体験であり、任意の図書館や提案は非常に高く評価されます。

#include <curl/curl.h> 
CURL *curlCtx = curl_easy_init(); 
curl_easy_setopt(curlCtx, CURLOPT_URL, "http://www.examplesite.com/testimage.jpeg"); 
curl_easy_setopt(curlCtx, CURLOPT_WRITEDATA, this); 
curl_easy_setopt(curlCtx, CURLOPT_WRITEFUNCTION, callbackfunction); 
const CURLcode rc = curl_easy_perform(curlCtx); 
if(rc == CURLE_OK){ 
    //it worked 
} 


size_t callbackfunction(char *data, size_t size, size_t nmemb, void *stream){ 
    //do something here with image...? 
} 

おかげで、 ジェームズ

編集:私は誤ってcallbackfunctionするために()を添加し申し訳ありません。

+0

5行目に 'callbackfunction'の代わりに' callbackfunction() 'を書きました。 – Blindy

答えて

6

コードはコンパイルできません。 URG!

受信データストリームを処理するためにcallbackfunction()を実装する必要があります。この場合、データをファイルに書きたいと思いますか?

コールの復帰を確認するのは良い習慣ですので、私が共有しているソースコードを慎重に勉強してください。以下のプログラムはあなたがしようとしていたことを達成します。

dw.cpp

#include <stdio.h> 
#include <curl/curl.h> 

size_t callbackfunction(void *ptr, size_t size, size_t nmemb, void* userdata) 
{ 
    FILE* stream = (FILE*)userdata; 
    if (!stream) 
    { 
     printf("!!! No stream\n"); 
     return 0; 
    } 

    size_t written = fwrite((FILE*)ptr, size, nmemb, stream); 
    return written; 
} 

bool download_jpeg(char* url) 
{ 
    FILE* fp = fopen("out.jpg", "wb"); 
    if (!fp) 
    { 
     printf("!!! Failed to create file on the disk\n"); 
     return false; 
    } 

    CURL* curlCtx = curl_easy_init(); 
    curl_easy_setopt(curlCtx, CURLOPT_URL, url); 
    curl_easy_setopt(curlCtx, CURLOPT_WRITEDATA, fp); 
    curl_easy_setopt(curlCtx, CURLOPT_WRITEFUNCTION, callbackfunction); 
    curl_easy_setopt(curlCtx, CURLOPT_FOLLOWLOCATION, 1); 

    CURLcode rc = curl_easy_perform(curlCtx); 
    if (rc) 
    { 
     printf("!!! Failed to download: %s\n", url); 
     return false; 
    } 

    long res_code = 0; 
    curl_easy_getinfo(curlCtx, CURLINFO_RESPONSE_CODE, &res_code); 
    if (!((res_code == 200 || res_code == 201) && rc != CURLE_ABORTED_BY_CALLBACK)) 
    { 
     printf("!!! Response code: %d\n", res_code); 
     return false; 
    } 

    curl_easy_cleanup(curlCtx); 

    fclose(fp); 

    return true; 
} 

int main(int argc, char** argv) 
{ 
    if (argc < 2) 
    { 
     printf("Usage: %s <url>\n", argv[0]); 
     return -1; 
    } 

    if (!download_jpeg(argv[1])) 
    { 
     printf("!! Failed to download file: %s\n", argv[1]); 
     return -1; 
    } 

    return 0; 
} 

がでコンパイル:g++ dw.cpp -o dw -lcurlとでテスト:

./dw http://unicornify.appspot.com/avatar/51d623f33f8b83095db84ff35e15dbe8?s=128 

このアプリケーションは、それがダウンロードされたデータとout.jpgという名前のディスクにファイルを作成します。

+1

ありがとうございました!!!あなたは私の人生をずっと簡単にしました。 – user1071840

関連する問題