著作一覧 |
MSDNのWindows 8 Input: Ink sample in C#/Xamlを眺めているのだが、とても不思議だ。
Windows.Storage.Pickers.FileSavePicker save = new Windows.Storage.Pickers.FileSavePicker(); save.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.Desktop; save.DefaultFileExtension = ".png"; save.FileTypeChoices.Add("PNG", new string[] { ".png" }); StorageFile filesave = await save.PickSaveFileAsync(); using (IOutputStream ab = await filesave.OpenAsync(FileAccessMode.ReadWrite)) { if (ab != null) await m_InkManager.SaveAsync(ab); }
これでpngファイルが書けるらしいのだが、なぜだ?
InkManagerはIOutputStreamのインスタンスabを受け取っているだけだが、出力の主体はInkManagerだ。だが、IOutputStreamにはメタデータ(出力タイプなど)を公開しているわけではない。
可能性の1つはInkManagerは常にPNGを出力するというものだ。
試しに以下に変えてみる。
save.DefaultFileExtension = ".jpg"; save.FileTypeChoices.Add("JPG", new string[] { ".jpg" });
うーん、JPGで書かれた……待てよ。と、ここでおれがPNGで書かれた、JPGで書かれたと書いているのはExplorerのファイルタイプ表示からだ。もしかして、これって単に拡張子データベースから値を引っ張っているだけかも。
というわけで、出力されたpngとjpgをダンプしてみる。
47 49 46 38 39 61 BB 03 18 02 F7……
おい、GIF89aじゃないか。何がPNGだよ。
ジェズイットを見習え |
http://msdn.microsoft.com/ja-jp/library/windows/apps/hh700421.aspx<br>には、しっかりとGIFのみと書かれていました。従って、サンプルが駄目ですね。
リンク先ありがとうございます。InkManagerのリファレンスからは出力形式が見つけられなかったので何を信じれば良いのか迷っていたのです。