런타임에 리소스 액세스

런타임에 리소스에 액세스하려면 다른 클래스 멤버의 경우와 마찬가지로 해당 리소스를 참조하기만 하면 됩니다. 다음 예제에서는 Image01이라는 비트맵 리소스를 검색하는 방법을 보여 줍니다. Resources 클래스는 <projectName>.Properties라는 네임스페이스에 있으므로 각 리소스에 대해 정규화된 이름을 사용하거나 Resources 클래스에 액세스할 소스 파일에 적절한 using 지시문을 추가해야 합니다.

System.Drawing.Bitmap bitmap1 = myProject.Properties.Resources.Image01;

내부적으로 get 속성은 ResourceManager 클래스를 사용하여 이 개체의 새 인스턴스를 만듭니다.

리소스 검색

System.Reflection.Assembly thisExe;
thisExe = System.Reflection.Assembly.GetExecutingAssembly();
System.IO.Stream file = 
    thisExe.GetManifestResourceStream("AssemblyName.ImageFile.jpg");
this.pictureBox1.Image = Image.FromStream(file);

ResourceManager

현재 문화권에 대해 지정된 오브젝트 리소스의 값을 가져옵니다.

        internal static System.Drawing.Bitmap Cancel {
            get {
                object obj = ResourceManager.GetObject("Cancel", resourceCulture);
                return ((System.Drawing.Bitmap)(obj));
            }
        }

.resx 리소스 파일 형식은

XML 태그 내에 개체와 문자열을 지정하는 XML 엔트리로 구성됩니다. 메모장이나 Microsoft Word 같은 텍스트 편집기에서 .resx 파일을 열면 파일에 대한 쓰기, 구문 분석 및 조작이 가능합니다. .resx 파일을 볼 때 이 이진 정보가 리소스 매니페스트의 일부인 경우에는 포함된 개체(예: 그림)의 이진 형식을 실제로 볼 수 있습니다. 이 이진 정보와는 별도로 .resx 파일을 완벽하게 읽고 유지 관리할 수 있습니다.

 

헤더 정보 다음에는 .txt 파일에서 문자열을 지정하는 것과 매우 유사한 이름/값 쌍 방식으로 각 엔트리를 기술합니다. .resx 형식의 이름/값 쌍은 XML 코드에 래핑되어 문자열 또는 개체 값을 기술합니다. .resx 파일에 문자열이 추가되면 다음 예제와 같이 문자열 이름은 <data> 태그에 포함하고 값은 <value> 태그로 묶습니다

<data name="string1">
    <value>hello</value>
</data>

 

다음 예제에서는 .resx 파일에 저장된 Int32 개체와 실제 .gif 파일의 이진 정보를 보유하는 비트맵 개체의 시작 부분을 보여 줍니다.

<data name="i1" type="System.Int32, mscorlib">
    <value>20</value>
</data>

<data name="flag" type="System.Drawing.Bitmap, System.Drawing,  
Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
mimetype="application/x-microsoft.net.object.bytearray.base64">
    <value>
        AAEAAAD/////AQAAAAAAAAAMAgAAADtTeX…
    </value>
</data>

 

ResXResourceWriter 클래스 사용 리소스 저장하기

using System;
using System.Drawing;
using System.Resources;
 
public class SampleClass
{
    public static void Main() 
    {
        Image img = Image.FromFile("en-AU.jpg");
        ResXResourceWriter rsxw = new ResXResourceWriter("en-AU.resx"); 
        rsxw.AddResource("en-AU.jpg",img);
        rsxw.Close();
    }
}

+ Recent posts