したがって、dllファイルから画像リソースを読み込もうとします。これを行うには、このメソッドを作成しました。LoadImageによって返されたハンドルでImage.FromHBitmapを呼び出すとGDI +エラーが発生する
static Bitmap GetImageResource(IntPtr handle, string resourceId)
{
IntPtr img_ptr = NativeMethods.LoadImage(handle, "#" + resourceId, IMAGE_ICON, 16, 16, 0);
if (img_ptr == IntPtr.Zero)
throw new System.ComponentModel.Win32Exception((int)NativeMethods.GetLastError());
return Image.FromHbitmap(img_ptr);
}
ハンドルとリソースIDを指定して、dllから画像リソースをロードします。 this question I asked yesterdayによれば、私はidに#を付ける必要があります。今LoadImageによって返されたハンドルはもはやゼロではない、私は Image.FromHbitmap
を使用して、このハンドルからビットマップ画像を作成しようとすると、しかし、私はSystem.Runtime.InteropServices.ExternalException
一般的なエラーがGDI +
を発生
を言ってます(または似たようなもの、私は英語でメッセージを受け取っていません)。
私はすでにthisとthisの質問を読んだけど、助けにはなりませんでした。
これはなぜですか?それはネイティブDLL(ではないアセンブリ)である場合は、あなたの代わりに相互運用機能を使用する必要があります
public static Bitmap getBitmapFromAssemblyPath(string assemblyPath, string resourceId) { Assembly assemb = Assembly.LoadFrom(assemblyPath); Stream stream = assemb.GetManifestResourceStream(resourceId); Bitmap bmp = new Bitmap(stream); return bmp; }
:DLLは.NETアセンブリである場合は事前に感謝
これは完全に正常です。イメージではなくアイコンを読み込んでいます。代わりにIcon.FromHandle()を使用してください。 Iconオブジェクトを再度使用できないことが確認されたら、DestroyIconでアイコンをもう一度破棄する必要があります。 –