Использование изображения SkiaSharp.SKBitmap в качестве ImageSource для кнопки в Xamarin - PullRequest
0 голосов
/ 07 августа 2020

Я пытаюсь использовать / преобразовать изображение SKBitmap как / в объект ImageSource, чтобы использовать вышеупомянутое изображение в Button путем присвоения его свойству ImageSource, но на всю жизнь , не могу понять, как преобразовать объект SKBitmap в ImageSource.

Поиск в Интернете дал только статьи / проблемы по преобразованию ImageSource в SKBitmap, но не наоборот.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 14 августа 2020

Свойство ImageSource класса Button относится к типу 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;
0 голосов
/ 07 августа 2020

Вы можете попробовать это:

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);
...