2012-03-28 2 views
4

少しばかとしての.resxでの画像、しかし...ストアバイト[]ではなく、ビットマップ

ビットマップとしての.resxで.jpgファイルを処理するVisual Studioのを防止する方法はあります私ができるように、代わりにリソースのbyte []プロパティにアクセスしますか?

私はしたいん:私の知っている

byte[] myImage = My.Resources.MyImage; 
+0

の代わりにByte[]を使用することができるはず、それはこれを行うには、あなたのアプリのパフォーマンスを傷つけるつもりです? 'ImageConverter converter =新しいImageConverter(); –

答えて

5

だからあなたはJPG ClassLibrary1の中に「foo.jpgという」を持っていると言うことができます代わりに

を「埋め込まれたリソース」を使用してみてください。 "Build Action"を "Embedded Resource"に設定します。

その後

byte[] GetBytes(string resourceName) 
{ 
    var assembly = GetType().Assembly; 
    var fullResourceName = string.Concat(assembly.GetName().Name, ".", resourceName); 
    using (var stream = assembly.GetManifestResourceStream(fullResourceName)) 
    { 
     var buffer = new byte[stream.Length]; 
     stream.Read(buffer, 0, (int) stream.Length); 
     return buffer; 
    } 
} 

あなたはより多くの再利用可能な方法をしたい場合は

、バイト

byte[] GetBytes() 
{ 
    var assembly = GetType().Assembly; 
    using (var stream = assembly.GetManifestResourceStream("ClassLibrary1.Foo.jpg")) 
    { 
     var buffer = new byte[stream.Length]; 
     stream.Read(buffer, 0, (int) stream.Length); 
     return buffer; 
    } 
} 

または、代わりを取得するには、このコードを使用して

var bytes = GetBytes("Foo.jpg"); 
+0

ええ、これは私が本当に望むものだと思います。アセンブリの中にファイルをたくさん並べて、ビルド時に出力する代わりにコードから作成できるようにする方法です。 – Grokodile

0

まさか、あなたはビットマップからビットマップではないが、バイト配列が含まれて返すように.designer.csで生成されたコードを再定義することができますが。

+0

私は自動生成されたものではあまりありません。あなたはおそらくそれが再び生成されるようにトリガされ、現在メンテナンスの頭痛があります。 –

5

付けを呼び出しますjpegは "myfile.jpeg.bin"のような別の拡張子を付けます。 Visual Studioはそれをバイナリファイルとして扱い、生成されたデザイナコードはbyte []を返します。

3

また、.resxファイルを右クリックして[コードの表示]をクリックしてください。

編集このようSystem.Byte[]を使用するXMLリソース項目:

<data name="nomap" type="System.Resources.ResXFileRef, System.Windows.Forms"> 
    <value>..\Resources\nomap.png;System.Byte[]</value> 
</data> 

保存して、あなたがBitmap

+0

これは私のためにのみ動作します。ありがとうございました –

+0

注:** Resource.Designer.cs **ファイルと混同しないでください。タイプが変更されると、実行時エラーが発生します。 ** Resource.resx **ファイルでタイプが変更されますか。 –

関連する問題