特集「ヨモヤマビルド」

Webサービスで画像転送-2

前回WebサービスでHTTP GETで画像を取得するコードを実装し、IEから取得できることを確認しました。

ではWebアプリ(C#)から画像を取得するコードを書いてみます。

.NET Framework4.5で使用できるHttpClientクラスを使うことにします。
URIは、VS.NET for Webのデバックモードなのでlocalhost:xxxxで接続しています。GET処理でHTTPのレスポンスオブジェクトを取得し、レスポンスがあった場合に処理をしています。繰り返しデータを取得するならばHttpResponseMessage response …の前にwhileループを記述してください。次にDynamicJsonを使ってjson形式のデータをパースしてbase64形式のデータを作成します。そのデータをデコードしてバイナリデータに変換します。データは8bitモノクロ画像だと予め分かっているのでWindows Bitmapオブジェクトを生成し、ヘッダ情報を整えてデータをセットします(Bitmap8クラスの説明は割愛)。最後にFormのPictureBoxにセットして画面表示しています。

 

HttpClient client = new HttpClient();

client.BaseAddress = new Uri(“http://localhost:3683/”);

// アクセプト設定
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(“application/json”));
// GET処理
HttpResponseMessage response = await client.GetAsync(“api/ImageTransfer”);

// レスポンスがあった場合
if (response.IsSuccessStatusCode) {
// データ取得
string content = response.Content.ReadAsStringAsync().Result;
// Json変換
dynamic JsonValues = DynamicJson.Parse(content);

byte[] data = null;

foreach (var value in JsonValues) {
string base64Data = (string)value.Base64Data;
data = Convert.FromBase64String(base64Data);
}

Bitmap8 bitmap8 = new Bitmap8();
bitmap8.width = IMAGE_LENGTH;
bitmap8.height = IMAGE_LENGTH;
Bitmap bitmap;

bitmap8.WriteBitmapData(data, out bitmap);
bitmap8 = null;
data = null;

if (_form._form1.pictureBox1.Image != null) {
_form._form1.pictureBox1.Image.Dispose();
}
_form._form1.pictureBox1.Image = bitmap;
} else {
;
}
// レスポンスクリア
response.Dispose();

 

このような感じで実装すればWebサービスから画像データを取得することができます。

またGETの特性としてデータ容量の問題があるのでPOSTも実装したいと思います。次回はPOSTのWEBサービス側をレポートします。