1

我的最终目标是放置一个 HBitmap,我使用以下代码从 Windows 缩略图缓存中检索到它:

// GUID of IShellItem.
Guid uuid = new Guid("43826d1e-e718-42ee-bc55-a1e261c37bfe");
SHCreateItemFromParsingName(filename, IntPtr.Zero, uuid, out ppsi);
((IShellItemImageFactory)ppsi).GetImage(new SIZE(72, 72), 0, out hbitmap);

成 JPEG 编码的流,然后我将通过网络发送。

我的第一次尝试是使用Image.FromHBitmap(),但是这个忽略了 alpha 通道。请参阅此问题: 在 C# 中使用本机 HBitmap 同时保留 Alpha 通道/透明度

解决方案显然是创建一个使用本机位图数据的新位图。但是请查看汉斯对另一个问题的回答的评论:有些拇指会颠倒,有些则不会。是否有可能确定我是否必须轮换?(大卫的评论没有答案,我不能在那里发表评论......)我读了很多次,位图数据通常是倒置存储的,那么步幅值将是负数。我检查了NativeMethods.BITMAP对象的所有字段,对于正常图像和倒置图像,它们都没有区别。所以必须有另一种解决方案。

还有另一个问题:当将位图保存到 JPEG 流时.Save(somestream, ImageFormat.Jpeg),透过图像透明部分的背景会变成白色,但我希望它是黑色的。

先感谢您!

4

0 回答 0