[C#] インターネットから画像をダウンロードしてメモリ上で操作する

ちょっと、技術ネタを放出。

ツイッターのクロールツールを作る中で、プロフィール画像をどうしようかと思っていたのですが、一度ファイルに落とさなくてもプロフィール画像(profile_image_url)をダウンロードしてメモリ上で操作できますよ、という話です。
このテクニック、asp.net mvc の記事を書いていたときに、ASP.NET MVC アプリケーション開発入門: 第 9 回 出力キャッシュの利用 – MSDN サンプル ギャラリー で microsoft の方に教えて頂きました thanx.

1
2
3
4
5
6
// アイコン表示
WebClient cl = new WebClient();
byte[] pic = cl.DownloadData(profile_image_url);
MemoryStream st = new MemoryStream(pic);
pictureBox1.Image = new Bitmap(st);
st.Close();

方法は単純で、WebClient で指定のURLをダウンロードして、byte 配列に入れます。こうすると on memory になるので、MemoryStream を通して、Bitmap に直します。これを PictureBox に代入すれば ok です。
って、簡単に書いていますが、試行錯誤すると結構面倒なもので「ストリームを使ってなんとかできる」ってのを覚えておけば ok です。
C# も java と同じように stream があちこちで使えるようになっているので。

実行するとこんな感じにできます。

ああ、自分のツイートも3,000を超えてしまったので、twitter api だけでは全てを取得できないんですよね。早く google 経由で取ることも考えないと。いくつか見ていくと、2万ツイートを超える方もかなりいるようなので。

カテゴリー: C# パーマリンク