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

hec*_*ate 1 c# xamarin xamarin.forms skiasharp

我试图将SKBitmap图像用作/转换为ImageSource对象,以便在Button分配给其ImageSource属性的情况下使用上述图像,但是,在我的一生中,无法弄清楚如何将SKBitmap对象转换为ImageSource.

在网上搜索只产生了关于转换ImageSourceSKBitmap而不是相反的文章/问题。

提前致谢。

Leo*_*SFT 5

你可以试试这个:

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);
Run Code Online (Sandbox Code Playgroud)


hec*_*ate 5

ImageSource类的属性是Buttontype 的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;
Run Code Online (Sandbox Code Playgroud)