[ カテゴリー » PC関連 ]

System.Drawing.BitmapをWPF用に変換

.NETで画像リソースやOpenCVLink の.NETラッパーEmguLink から画像データを得ようとするとSystem.Drawing.Bitmapインスタンスになるのですが、WPFで直接読み込む方法がないようです。というわけで変換になるのですが、これがちと曲者っぽいので備忘録。

Stream経由

コードが短くて済むのは一旦StreamにBMP形式(昨今メモリは潤沢にあるのでPNG等圧縮する必要はないかと)で保存、それを読みこませる方法。

using System.Windows.Controls;
using System.Drawing;
using System.IO;
(省略)
Bitmap bmp = (何か);
using (Stream st = new MemoryStream())
{
    bmp.Save(st, ImageFormat.Bmp);
    st.Seek(0, SeekOrigin.Begin);
    image1.Source = BitmapFrame.Create(st, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
}

この方法が曲者なのはBitmapFrame.CreateがStream読み込みを同期でするのか非同期なのかよく分からない所。非同期で上のコードだと読み込み完了前にStreamが破棄される可能性が高いので失敗(例外は出ず画像が表示されない)。とは言え読み込み終わってもStreamは自動的には閉じられないようなので、放おっておくとガベージコレクション任せということでしょうか。

ネット上の画像を同期読み込みするとBitmapFrame.Createで処理がブロックされるため非同期にするのでしょうけど、同期と非同期の切替条件が今ひとつはっきりしない。私の環境(Windows7 x64、Visual C# 2010 Express、.NET Framework 4 Client Profile)だとFileStreamとMemoryStreamは同期、WebResponseから得るStreamは非同期になるようでしたが、環境や将来的に変わるかもしれない。

非同期になると読み込み中はBitmapFrameインスタンスのIsDownloadingがtrueになり、完了時にDownloadCompletedイベントが飛ぶ(同期だと飛ばない)みたいなのでプロパティをチェックしてイベントハンドラでStreamを閉じるという方法もありますが、イベントハンドラをセットする前に読み込みが完了する可能性がゼロではないため、ちと不安。まぁCreateの直後にやればまず大丈夫でしょうけど。

HBitmap経由

Unmanagedに抵抗がなければ、こちらの方がある意味悩まなくて済むかと。

using System.Windows.Controls;
using System.Drawing;
using System.IO;
(省略)
[System.Runtime.InteropServices.DllImport("gdi32.dll")]
public static extern bool DeleteObject(IntPtr hObject);
(省略)
Bitmap bmp = (何か);
IntPtr hBitmap = bmp.GetHbitmap();
try
{
    image1.Source = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
        hBitmap,
        IntPtr.Zero,
        Int32Rect.Empty,
        System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
}
finally
{
    DeleteObject(hBitmap);
}

LateBoundBitmapDecoderLink なんてもの別途用意しているんだから、自動で同期・非同期を切り替えるのはやらなくていいと思う、個人的には。

[参考]

— posted by mu at 01:05 pm   commentComment [2]  pingTrackBack [0]

Windows8 x64 CP

blog20120304-Windows8CP

以前Dell Vostro1500に入れたWindows7 RCLink に上書きする形で、インストール。この記事もWindows8から書き込み。

インストールはISOファイルをタウンロードしてDVDから起動。最初数分間画面の真ん中にポリゴン金魚が表示されるだけの状態が続き、ハングアップしたのかと不安に。Vistaあたりから起動時に情報を表示しなくなってきてるのですが、さらに拍車がかかった感じ。20年くらい前のMacは通常使用でもとにかくシステム情報を見せてくれなくて、不具合などを隠蔽し続けた末いきなりSad Macとか爆弾アイコンを出して止まるのが大嫌いだったのですが、Windowsもそっちに行ってしまってますね。大多数のユーザーにはシステム情報をテキストでバラバラっと表示しても不安を煽るだけなのでしょうけど。

噂程度には内容を聞いていてはいたものの、Metro UIを使うのは初めて。各アプリケーションは基本全画面を使用という思想はDOSに先祖返りしたように思え、やっぱりデスクトップPCの持つ広大なデスクトップにはもったいない使い方。私は起動後速攻でデスクトップを表示し、右下隅に表示したテレビをながら見しつつネトゲやブラウザを起動する従来の使い方に収まりそう。あとMetro UIでもたらされた新機能がクラウドとかSNSとか私が普段使用しない機能ってのも、「Windows8、別にいらないなぁ」と思う理由になるかと。

— posted by mu at 11:05 pm   commentComment [0]  pingTrackBack [0]

Win7のパスワードが無効になった

blog20120219-Win7InvalidPassword

なんかブログネタになるようなトラブルが続くここ数日。

昨晩Windows7をハイバネートして寝ました→朝起動したらパスワードが違うと言われました(T_T)。もちろんパスワードは変えてはいませんし、Caps Lockもかかってない。キーボードが壊れたかなと思い、ソフトウェアキーボードでも打ち込みましたが結果は同じ。パスワードファイルが壊れたのかなぁ。

調べた所、回復方法は以下の通り。

  • 別の管理者権限のあるユーザーでログインし、パスワードを再設定 → そんなアカウント作ってませんでした
  • パスワードをリセットするLink 。事前にパスワードファイルを作成、フロッピーディスクやUSBメモリに保存しておく必要あり → そんなもの作ってませんでした
  • 分かっているパスワードが使えていた時点の復元ポイントまで戻すLink → 採用
  • Windows Home Serverでバックアップしていたものをリストアする → これも事前の準備が必要。復元ポイントで解決したので見送り。
  • Windows再インストール _| ̄|○

パスワードが勝手に変わる・壊れるなんて初めてだよ。こんなことでWindows再インストールは面倒極まりないので、パスワードファイルを作ったり別の管理者権限アカウントを作成したほうがいいですね。

— posted by mu at 10:01 pm   commentComment [0]  pingTrackBack [0]

朝PCの電源を入れると

blog20120216-NTFSClone_LostData

なんか様子がおかしい。具体的には動画圧縮が進まない、再生が始まらない。ネットワーク先のファイルは難なく再生。耳を澄ますと中から「ジ…ジ…ジ…」と爽やかな(嘘)音。HDD壊れやがった orz

幸いにも一部の領域が読み出せなくなっているだけのようなので、PC落として復旧作業。KNOPPIXLink 立ち上げて、ntfscloneで壊れかけたHDDのパーティションを別HDDにコピー…案の定Bad sectorのため読み出し不能でエラー終了。--rescueオプション付けて再挑戦っと。

ほとんどのデータは無事。壊れていたファイルもバックアップがあったため、多分完全復旧できたでしょう。いやぁ、よくこの時点で異常に気づけたものだ。

— posted by mu at 10:30 pm   commentComment [0]  pingTrackBack [0]

USB給電式無線LANルーター

blog20120129-Logitec_LAN-W300N-PR5

別件で家電店を覗いたらLogitec LAN-W300N/PR5Link が1280円と叩き売られていたので、思わず購入。

以前購入したUSB給電LANハブLink は今回のフィリピン出張でも大活躍してますが、今回購入したのはUSB給電式無線LANルーターです。個人的な感想としては

長所
  • 大きさ、ハブより横が2cmほど長い程度。いやはや無線ルーターがこんなサイズになっていたとは。
  • ミニもしくはマイクロコネクタUSBケーブルで給電できます(ACアダプタも付属)。ハブは専用ケーブルだったので、断線したり紛失したら作らないといけなくて面倒だなと思ってました。
  • 有線LANのコネクタも付いてるのでハブとしても使えます。ま、まず出張では使わないけど。
短所
  • 電波が弱いらしい。ただそれは通常の無線LAN機器が一般二階建て家屋全部にいきわたるということと比較しての話で、ホテルの部屋内では全く問題なし。
  • 無線がMIMOで最大300Mbpsを謳っているのに、有線は100Mbpsと片手落ち。
  • 外装がプラスティック。電波飛ばすんだからしょうがない。

短所の原因はUSB給電を考慮すると電力が不足しているからでしょうね。

さすがに会社内で電波飛ばすと怒られそうなのでホテルの中だけで使用してますが、性能に不満なし。軽くて電源の入手も楽になるので、これも出張のお供になりそうです。(そしてまた荷物の重量が増える)

— posted by mu at 11:13 pm   commentComment [0]  pingTrackBack [0]

T: Y: ALL: Online:
ThemeSwitch
  • Basic
Created in 0.0259 sec.
prev
2025.10
next
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31