2012-03-28 6 views
4

leicht bescheuert, aber ...Shop Bild in .resx als byte [] statt Bitmap

Gibt es eine Möglichkeit Visual Studio Behandlung eine JPG-Datei in einem .resx als Bitmap zu verhindern, so dass ich Zugriff stattdessen auf eine byte [] -Eigenschaft für die Ressource?

Ich will nur:

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

Lage sein Byte[] verwenden wird es die Leistung Ihrer App zu verletzen, dies zu tun ? 'ImageConverter Konverter = neuer ImageConverter(); zurück (byte []) converter.ConvertTo (img, typeof (byte [])); ' –

Antwort

5

Versuchen Sie, eine "Embedded Resource" statt

können also sagen, dass Sie eine jpg haben mit "foo.jpg" in ClassLibrary1. Setzen Sie die "Build Action" auf "Embedded Resource".

Dann diesen Code verwenden, um die Bytes

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; 
    } 
} 

Oder alternativ zu bekommen, wenn Sie eine wiederverwendbare Methode

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; 
    } 
} 

wollen und

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

Ja, ich denke, das ist es, was ich wirklich will. Ich suche nach einer Sammlung von Dateien in einer Assembly, damit ich sie aus Code erstellen kann, anstatt sie zur Buildzeit zu kopieren. – Grokodile

0

No way ich kenne, auch wenn Sie den erzeugten Code in designer.cs neu definieren kann kein Bitmap aber Byte-Array zurück aus dem Bitmap enthalten sind.

+0

Eh, würde ich nicht viel mit dem selbst erzeugten Zeug. Sie werden wahrscheinlich am Ende auslösen, dass es wieder generiert wird und jetzt haben Sie Kopfschmerzen. –

5

das Geben Sie rufen JPEG-Datei eine andere Erweiterung, z. B. "myfile.jpeg.bin". Visual Studio sollte es dann als Binärdatei behandeln, und der generierte Designercode gibt Byte [] zurück.

3

Alternativ klicken Sie mit der rechten Maustaste auf Ihre .resx Datei und klicken Sie auf "Code anzeigen".

Bearbeiten Sie die XML-Ressourcenelement System.Byte[] wie folgt zu verwenden:

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

speichern und Sie sollten statt Bitmap

+0

Nur das funktioniert für mich, danke –

+0

Hinweis: nicht mit ** Resource.Designer.cs ** Datei verwechselt, jede Änderung des Typs gibt Ihnen einen Laufzeitfehler. Ändert sich Ihr Typ in der Datei ** Resource.resx **. –