'How can i convert a file .png to a Bitmap? Nothing works for me. Error "'Failed to decode image. The provided image must be a Bitmap.'" Xamarin.forms

I'm working with Xamarin in the part of Xamarin.Forms i need to convert a file ("image.png") to a Bitmap because when project run its enter in "break mode" and show me this message "Java.Lang.IllegalArgumentException: 'Failed to decode image. The provided image must be a Bitmap.'". So i tried to convert the file in many ways like:

1_ Using methods from System.Drawing.Bitmap but it's show this exception "This operation is not supported in this platform"

2_ Cannot use Android.Graphics because i'm working in xamarin.forms not in xamarin.android.

3_ I tried to convert the "image.png" into a base64 or byte[] array and then into a bitmap but the problem is the same like in first problem because to convert from byte[] array or base64 to a Bitmap i have use methods from System.Drawing.Bitmap.

4_ I tried using the library SkiaSharp but i don't have success because i don't found so much information about how to convert .png to SKBitmap and then convert SKBitmap to Bitmap (even i don't know if this is possible).

5_ Finally i converted "image.png" to a "image.bmp" with an app and use the file .bmp in my project but it doesn't work too.

the "image.png" i have to save in a string variable, well that's the idea.

If you have a solution with SkiaSharp o whatever i will glad

EDIT

here is a part of my code, i just save in a variable the image

Icon = "pin_blue.png";
//i can't use a path because in xamarin you have many size from the same 
//image for the different size of the screen

EDIT 2 This is my method to show the pins in google maps

private void ShowPins(List<PointsOfInterest> resultPointsOfInterest)
        {
            if (resultPointsOfInterest != null && resultPointsOfInterest.Any())
            {
                var location = Geolocation.GetLastKnownLocationAsync();
                PointsOfInterest position = new PointsOfInterest();
                if (location != null)
                {
                    position.ccsm0166latitud = location.Result.Latitude;
                   position.ccsm0166longitud = location.Result.Longitude;
                
            }
            else {
                position = resultPointsOfInterest.First();
            }
            //Distance = Distance.FromKilometers(new Random().Next(23,35));
            Distance = Distance.FromKilometers(3);
            Position = new Position(position.ccsm0166latitud, position.ccsm0166longitud);
            PinsFiltered= Pins = new List<PinCustom>(resultPointsOfInterest.Select(
                x => new PinCustom()
                {
                    Position =
                        new Position(x.ccsm0166latitud, x.ccsm0166longitud),
                    Address = x.ccsm0166direccion,
                    Label = x.ccsm0166nombre,
                    Type = PinType.Place,
                    TypePointOfInterest = x.ccsm0166tipositio,
                    IconBM = Int32.Parse(x.ccsm0166tipositio) == (int)PointOfInterestType.branch ?  PinCustom.ConvertToBitmap("pin_blue.png") :
                        Int32.Parse(x.ccsm0166tipositio) == (int)PointOfInterestType.branch ? "pin_blue.png" :
                        Int32.Parse(x.ccsm0166tipositio) == (int)PointOfInterestType.branchWithExtendedHours ? "pin_black.png" :
                        Int32.Parse(x.ccsm0166tipositio) == (int)PointOfInterestType.branchWithExtendedHours2 ? "pin_black.png" :
                        Int32.Parse(x.ccsm0166tipositio) == (int)PointOfInterestType.branchWithExtendedHours3 ? "pin_black.png" :
                        Int32.Parse(x.ccsm0166tipositio) == (int)PointOfInterestType.selfServiceTerminal ? "pin_green.png" :
                        Int32.Parse(x.ccsm0166tipositio) == (int)PointOfInterestType.atmServBox ? "pin_yellow.png" : string.Empty
                }).ToList());
        }
        else
        {
            Pins = new List<PinCustom>();
        }
    }

This is the class Pin where i save the image

public class PinCustom : Pin
    {
        public string TypePointOfInterest { get; set; }
        public string Icon { get; set; }
        public Bitmap { get; set; }
        //Here  i create this variable to save a bitmap but i don't know if i do the things well
    }

this is the icon .png i want to show in googlemaps

Pin Blue Image



Solution 1:[1]

Use ffmpeg command for this: ffmpeg -i image.png image.bmp

Solution 2:[2]

i have 5 types of pins (pins are the image .png) when i put the pins in format .png

if you want to custom the pins in your map, you can simply use Custom Renderers to achieve this.

The icon used to represent a marker can be customized by calling the MarkerOptions.SetIcon method. This can be accomplished by overriding the CreateMarker method, which is invoked for each Pin that's added to the map:

protected override MarkerOptions CreateMarker(Pin pin)
{
    var marker = new MarkerOptions();
    marker.SetPosition(new LatLng(pin.Position.Latitude, pin.Position.Longitude));
    marker.SetTitle(pin.Label);
    marker.SetSnippet(pin.Address);
    marker.SetIcon(BitmapDescriptorFactory.FromResource(Resource.Drawable.pin));
    return marker;
}

If you want to display different icons, you can refer to the following code:

protected override MarkerOptions CreateMarker(Pin pin)
    {
        var marker = new MarkerOptions();
        marker.SetPosition(new LatLng(pin.Position.Latitude, pin.Position.Longitude));
        marker.SetTitle(pin.Label);
        marker.SetSnippet(pin.Address);
        var customPin = (Element as CustomMap).CustomPins.FirstOrDefault(p => p.Position == pin.Position);
        if (customPin != null)
        {
            if (customPin.IconType == "corporate")
            {
                marker.SetIcon(BitmapDescriptorFactory.FromResource(Resource.Drawable.corporate));
            }
            else if (customPin.IconType == "pickup")
            {
                marker.SetIcon(BitmapDescriptorFactory.FromResource(Resource.Drawable.bus));
            }
        }

        return marker;
    }

For more, check:Customizing the Marker.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Jerry
Solution 2 Jessie Zhang -MSFT