リソースから画像が取れない

リソースにpng画像を放り込んで、そうすると、勝手にプロパティを作ってくれて、そのプロパティでは、ResourceManager.GetObject() を実行して、リソースを取りだしてくれます。
で、.Net Compact でやってみると、NotSupportedException が出ました。メッセージは「System.Drawing.Bitmap」とだけ。いやなんとなく分かるんですけどね、Bitmapオブジェクトはダメなんですね。
うーん、なんていうかさー、あいかわらずだね orz

「埋め込まれたリソース」は成功

他の方法は無いかと探していると、
http://msdn.microsoft.com/ja-jp/library/cc465485.aspx
「.Net Compact Framework に関するよくある質問」
というのがあって、7.3 に、埋め込まれたリソースへのアクセス方法が書いてありました。

Dim asm as System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()
Dim bmp as New Bitmap(asm.GetManifestResourceStream("CE_TEST.foobar.png"))

ここで、CE_TESTというのはアセンブリ名(プロジェクトプロパティで設定しています)。foobar.pngは、そのまんまファイル名。
この引数文字列が分からなくなったら、とりあえずデバッガを動かして asm を生成するところで止め、

asm.GetManifestResourceNames

をウォッチペインに表示させてみるといいでしょう。
なお、foobar.png を埋め込みリソースにするには、プロジェクト内に持って来て、プロパティで「ビルドアクション」を「埋め込まれたリソース」にします。
でもこれがベストな対応なのかは分かりません。

ResoruceReaderはダメみたい

http://forums.msdn.microsoft.com/ja-JP/vblanguage/thread/229fc27c-af01-4702-8c50-c9214fe9e565/
で mp3ファイルをリソースから取り出すというのをやってました。

Dim asm As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()
Dim rs As System.IO.Stream = asm.GetManifestResourceStream("CE_TEST.Resources.resources")
Dim rr As New Resources.ResourceReader(rs)
Dim rcs As System.Collections.IDictionaryEnumerator = rr.GetEnumerator()
Do While rcs.MoveNext
    Dim s As String = CStr(rcs.Key)
    If s = "foobar" Then
        Dim ba As Byte() = CType(rcs.Value, Byte())
    End If
Loop

foobar.pngをMy.Resourcesに食わせておいて、これを実行してみたところ、Resources.ResourceReader::GetEnumerator() までは成功。しかし、IDictionaryEnumerator::value で、"Not Supported Exception" が出て失敗。
もしかしたら、ResourceManager.GetObject() と結局は同じところで失敗しているんではないかと。