在 Xamarin 中使用 SkiaSharp.SKBitmap 图像作为按钮的图像源

Using SkiaSharp.SKBitmap image as the ImageSource for a Button in Xamarin

我正在尝试 use/convert SKBitmap 图像 as/to 一个 ImageSource 对象,以便通过分配给 Button 使用上述图像它 ImageSource 属性 但是,对于我来说,无法弄清楚如何将 SKBitmap 对象转换为 ImageSource.

在网络上搜索仅在将 ImageSource 转换为 SKBitmap 时产生 articles/issues 而不是相反。

提前致谢。

你可以试试这个:

SKBitmap bitmap = ...;
// create an image COPY
//SKImage image = SKImage.FromBitmap(bitmap);
// OR
// create an image WRAPPER
SKImage image = SKImage.FromPixels(bitmap.PeekPixels());
// encode the image (defaults to PNG)
SKData encoded = image.Encode();
// get a stream over the encoded data
Stream stream = encoded.AsStream();
img.Source = ImageSource.FromStream(()=> stream);

Buttonclass的ImageSource属性是ImageSource类型,其值可以设置为代表路径的字符串通过将字符串分配给 属性 或使用 ImageSource.FromFile() 方法来获取图像。由于 ImageSource 类型不能与 SKBitmap 图像一起使用,因此可以将 SKBitmap 对象表示的图像保存到磁盘(最好在应用程序缓存中)以及保存图像的路径可用于初始化相关 ImageSource 对象。

SKBitmap bitmap;

SKImage image = SKImage.FromBitmap(bitmap);
SKData encodedData = image.Encode(SKEncodedImageFormat.Png, 100);
string imagePath = Path.Combine(FileSystem.CacheDirectory, "image.png");
bitmapImageStream = File.Open(imagePath, 
                              FileMode.Create, 
                              FileAccess.Write, 
                              FileShare.None);
encodedData.SaveTo(bitmapImageStream);
bitmapImageStream.Flush(true);
bitmapImageStream.Dispose();

ImageSource imgSrc;
imgSrc = ImageSource.FromFile(imagePath);
// or imgSrc = imagePath;