У меня возникли проблемы при попытке использовать изображение PNG с действием сборки 'Resource' с генерацией маркера карты GMap.NET, которая ожидает тип Bitmap.
Я создаю BitmapImage, используя пакет Uri, а затем преобразую BitmapImage в Bitmap, используя код, предоставленный Сашей Хеннингом в их ответе здесь:
Преобразование BitmapImage в Bitmap и наоборот
Полученный код выглядит следующим образом:
BitmapImage bmi = new BitmapImage(
new Uri("pack://application:,,,/Images/MapMarker_JobComplete.png"));
System.Drawing.Bitmap markerBitmap = Helpers.BitmapImageToBitmap(bmi);
GMarkerGoogle marker = new GMarkerGoogle(jobLoc, markerBitmap);
Где Helpers.BitmapImageToBitmap ():
public static Bitmap BitmapImageToBitmap(BitmapImage bitmapSource)
{
using( MemoryStream outstream = new MemoryStream())
{
BitmapEncoder enc = new BmpBitmapEncoder();
enc.Frames.Add(BitmapFrame.Create(bitmapSource));
enc.Save(outstream);
return new System.Drawing.Bitmap(outstream);
}
}
Выше работает, но изображение отображается с черным фоном вместо прозрачного фона. Я могу только предположить, что преобразование в BitmapImage или из BitmapImage в Bitmap является ответственным.
Я нашел ссылку на необходимость сохранения PNG-изображений на более низкую глубину, но с установленным в данный момент программным обеспечением (Affinity) я не смог экспортировать с битовой глубиной 16, как было сказано, только PNG- 8 (битовая глубина 8; красный фон, предположительно из-за пониженного качества) или стандарт PNG-24 (битовая глубина 32; черный фон)
PNG-24 PNG-8
В настоящее время для получения желаемых результатов (поддерживается прозрачность) я использую PNG с действием построения «Содержимое» со следующим кодом:
System.Drawing.Image imgMarker = System.Drawing.Bitmap.FromFile(
System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
"Images/MapMarker_JobComplete.png"));
GMarkerGoogle marker = new GMarkerGoogle(jobLoc, (System.Drawing.Bitmap)imgMarker);
Вышеописанное работает нормально, поэтому Bitmap должен поддерживать прозрачность, но при этом я оставляю файлы PNG в качестве содержимого, и я бы предпочел, чтобы они были встроены в исполняемый файл, а также имел возможность использовать пакет Uri в XAML, если / когда это необходимо .
Ясно, что есть некоторые знания, которые мне не хватает или которые я не смог найти, и есть довольно много тем о людях, желающих сохранить прозрачность, но с конечным результатом BitmapImage, а не Bitmap, как Я требую.