texture.LoadImage(bitmap.GetHicon()); 无法从inptr转化为 byte[]
时间: 2024-10-18 16:18:47 浏览: 32
在C#中,使用`Texture2D.LoadImage()`方法将图标(由`Bitmap.GetHicon()`获得的HICON handle)转换为byte数组可能会遇到问题,因为`LoadImage()`方法期望的是一个内存中的像素数据,而不是系统图标资源。
`GetHicon()`方法返回的是一个表示图标的小型图标资源,而`LoadImage()`通常处理的是从磁盘文件、网络流或者其他内存缓冲区中读取的数据。如果直接把`GetHicon()`的结果给`LoadImage()`,它可能不会按预期工作。
解决这个问题的一个常见做法是先将HICON保存到内存中,例如创建一个临时的位图,再将这个位图转换成byte数组。这里是基本的步骤:
1. 将HICON转换为Bitmap:
```csharp
// 如果需要,先复制HICON到一个新的Bitmap
Bitmap tempBitmap = new Bitmap(bitmap.Width, bitmap.Height);
Graphics.FromHbitmap(tempBitmap.GetHbitmap()).DrawIcon(hIcon, Point.Empty);
```
2. 然后将Bitmap转换为byte[]:
```csharp
using (MemoryStream ms = new MemoryStream())
{
tempBitmap.Save(ms, ImageFormat.Icon);
byte[] iconBytes = ms.ToArray();
// 此时,iconBytes就是所需的字节数组了
texture.LoadImage(iconBytes, TextureLoader.GetNativeTypeForFormat(TextureFormat.ARGB32));
}
```
请注意,这种方法依赖于系统的位图保存和加载机制,可能会有一定的性能开销,并且对于大型图标可能不是最优的选择。
阅读全文