画像をダウンロード機能性
このコミットが含まれているのは:
コミット
f9a6ec1c1a
@ -6,6 +6,7 @@
|
|||||||
* 再レンダーリングの問題の修正
|
* 再レンダーリングの問題の修正
|
||||||
* 画像回転機能性の追加
|
* 画像回転機能性の追加
|
||||||
* 画像反転機能性の追加
|
* 画像反転機能性の追加
|
||||||
|
* 画像をダウンロード機能性
|
||||||
|
|
||||||
# 0.5.0
|
# 0.5.0
|
||||||
* .desktopファイルの追加
|
* .desktopファイルの追加
|
||||||
|
60
main.c
60
main.c
@ -3,6 +3,8 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
#define DELAY_MS 50
|
#define DELAY_MS 50
|
||||||
|
|
||||||
@ -10,6 +12,7 @@ SDL_Window* window = NULL;
|
|||||||
SDL_Renderer *renderer = NULL;
|
SDL_Renderer *renderer = NULL;
|
||||||
SDL_Texture *texture = NULL;
|
SDL_Texture *texture = NULL;
|
||||||
bool quit = false;
|
bool quit = false;
|
||||||
|
bool hasdownloaded = false; // DDoSを避ける為
|
||||||
float aspectRatio;
|
float aspectRatio;
|
||||||
int imgX = 10;
|
int imgX = 10;
|
||||||
int imgY = 10;
|
int imgY = 10;
|
||||||
@ -18,6 +21,8 @@ int imgHeight;
|
|||||||
int screenWidth;
|
int screenWidth;
|
||||||
int screenHeight;
|
int screenHeight;
|
||||||
int init = 0;
|
int init = 0;
|
||||||
|
char *imgfilename;
|
||||||
|
char *imgurl;
|
||||||
SDL_Rect renderQuad;
|
SDL_Rect renderQuad;
|
||||||
float newWidth;
|
float newWidth;
|
||||||
float newHeight;
|
float newHeight;
|
||||||
@ -77,6 +82,40 @@ bool dlfile(const char* url, const char* filename) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *fromurl(char *imgfile, char *dir) {
|
||||||
|
char s[512], *p, *tokens[128];
|
||||||
|
char *last;
|
||||||
|
int i = 0;
|
||||||
|
imgurl = imgfile;
|
||||||
|
|
||||||
|
snprintf(s, sizeof(s), "%s", imgfile);
|
||||||
|
|
||||||
|
for (
|
||||||
|
(p = strtok_r(s, "/", &last));
|
||||||
|
p;
|
||||||
|
(p = strtok_r(NULL, "/", &last))
|
||||||
|
) {
|
||||||
|
if (i < 127) tokens[i++] = p;
|
||||||
|
}
|
||||||
|
|
||||||
|
tokens[i] = NULL;
|
||||||
|
imgfilename = tokens[i - 1];
|
||||||
|
|
||||||
|
char *res;
|
||||||
|
|
||||||
|
res = (char *)malloc(1024);
|
||||||
|
if (res == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
snprintf(res, 1024, "%s/%s", dir, imgfilename);
|
||||||
|
if (!dlfile(imgfile, res)) {
|
||||||
|
printf("画像をダウンロードに失敗。URL: %s\n", imgfile);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
void RenderCopy(SDL_Rect renderQuad) {
|
void RenderCopy(SDL_Rect renderQuad) {
|
||||||
SDL_RenderCopyEx(
|
SDL_RenderCopyEx(
|
||||||
renderer,
|
renderer,
|
||||||
@ -141,7 +180,14 @@ void windowevent(SDL_Event e) {
|
|||||||
flippedH = !flippedH;
|
flippedH = !flippedH;
|
||||||
SDL_RenderPresent(renderer);
|
SDL_RenderPresent(renderer);
|
||||||
} else if (e.key.keysym.sym == SDLK_o) {
|
} else if (e.key.keysym.sym == SDLK_o) {
|
||||||
// 画像をダウンロードする(リモート画像のみ)
|
bool isurl = strncmp(imgurl, "http://", 7) == 0 ||
|
||||||
|
strncmp(imgurl, "https://", 8) == 0;
|
||||||
|
if (isurl && !hasdownloaded) {
|
||||||
|
char path[1024];
|
||||||
|
getcwd(path, 1024);
|
||||||
|
if (fromurl(imgurl, path) != NULL) puts("ダウンロード済み");
|
||||||
|
hasdownloaded = true;
|
||||||
|
}
|
||||||
} else if (e.key.keysym.sym == SDLK_p) {
|
} else if (e.key.keysym.sym == SDLK_p) {
|
||||||
// 画像をrsync|sftp|http postで使って共有する、0.7.0から追加する予定
|
// 画像をrsync|sftp|http postで使って共有する、0.7.0から追加する予定
|
||||||
}
|
}
|
||||||
@ -321,16 +367,11 @@ int main(int argc, char* argv[]) {
|
|||||||
// URLの場合、仮にダウンロードして
|
// URLの場合、仮にダウンロードして
|
||||||
bool isurl = strncmp(imgfile, "http://", 7) == 0 ||
|
bool isurl = strncmp(imgfile, "http://", 7) == 0 ||
|
||||||
strncmp(imgfile, "https://", 8) == 0;
|
strncmp(imgfile, "https://", 8) == 0;
|
||||||
char tmpname[] = "/tmp/netimg.png";
|
imgfile = isurl ? fromurl(argv[1], "/tmp") : argv[1];
|
||||||
if (isurl) {
|
if (imgfile == NULL) {
|
||||||
if (!dlfile(imgfile, tmpname)) {
|
|
||||||
printf("画像をダウンロードに失敗。URL: %s\n", imgfile);
|
|
||||||
SDL_DestroyRenderer(renderer);
|
SDL_DestroyRenderer(renderer);
|
||||||
SDL_DestroyWindow(window);
|
SDL_DestroyWindow(window);
|
||||||
SDL_Quit();
|
SDL_Quit();
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
imgfile = tmpname;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 画像の読込
|
// 画像の読込
|
||||||
@ -405,9 +446,6 @@ int main(int argc, char* argv[]) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 掃除
|
// 掃除
|
||||||
if (isurl) {
|
|
||||||
remove(tmpname);
|
|
||||||
}
|
|
||||||
SDL_DestroyTexture(texture);
|
SDL_DestroyTexture(texture);
|
||||||
SDL_DestroyRenderer(renderer);
|
SDL_DestroyRenderer(renderer);
|
||||||
SDL_DestroyWindow(window);
|
SDL_DestroyWindow(window);
|
||||||
|
読み込み中…
新しいイシューから参照
ユーザーをブロックする