Моя последняя цель - поместить 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()
, но эта игнорирует альфа-канал.Смотрите этот вопрос: Используйте собственный HBitmap в C #, сохраняя альфа-канал / прозрачность
Очевидно, что решение состоит в том, чтобы создать новое растровое изображение, которое использует данные нативного растрового изображения.Но, пожалуйста, проверьте комментарии ответа Ганса на другой вопрос: одни пальцы будут перевернуты, а другие нет.Есть ли возможность определить, должен ли я вращаться или нет?(нет ответа на комментарий Дэвида, и я не могу комментировать там ...) Я читал много раз, что обычно растровые данные хранятся в обратном порядке, и тогда значение шага будет отрицательным.Я проверил все поля объекта NativeMethods.BITMAP
, и все они не отличаются для обычных и перевернутых изображений.Поэтому должно быть другое решение.
Существует также другая проблема: при сохранении растрового изображения в JPEG-поток с .Save(somestream, ImageFormat.Jpeg)
фон, сияющий через прозрачные части изображения, становится белым, но я хочу, чтобыбыть черным.
Заранее спасибо!