Xamarin 将SKSurface转换为SKBitmap,并将大小调整为不同设备大小上特定大小的图像
我有一个Xamarin表单视图,根据触摸事件我可以改变图像Xamarin 将SKSurface转换为SKBitmap,并将大小调整为不同设备大小上特定大小的图像,xamarin,xamarin.forms,skiasharp,Xamarin,Xamarin.forms,Skiasharp,我有一个Xamarin表单视图,根据触摸事件我可以改变图像 <StackLayout > <skia:SKCanvasView x:Name="canvasView" PaintSurface="ImageCanvas_PaintSurface" EnableTouchEvents="True"
<StackLayout >
<skia:SKCanvasView x:Name="canvasView"
PaintSurface="ImageCanvas_PaintSurface"
EnableTouchEvents="True"
HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"
IgnorePixelScaling="True"// not sure if i need this??
Touch="OnTouch" />
<Button Text="Generate Image" Clicked="CreateButton_Clicked"/>
</StackLayout>
就我所知,如果我能将surface.Snapshot()返回的SKImage转换成SKBitmap,我可以使用Resize()函数。我该怎么做
谢谢 您可以拍摄照片并将其保存为设备文件夹中的略图,然后将其获取为流,调整大小并再次保存
SKImage snapI = e.Surface.Snapshot();
SKData pngImage = snapI.Encode();
var x= Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "FolderName");
var fullpath = x+"PicName.png";
File.WriteAllBytes(fullpath, pngImage.ToArray());
SKBitmap bitmap = SKBitmap.Decode(fullpath);
var dstInfo = new SKImageInfo(1060, 550);
bitmap.Resize(dstInfo, SKBitmapResizeMethod.Hamming);
您可以根据需要进一步改进和优化代码。我觉得您的方法还可以。您需要考虑不同设备上的屏幕大小与1060x550不匹配,因此您需要裁剪或拉伸图像以填充整个1060x550图像。为什么您需要这种特定的1060x550分辨率?我的要求需要这种精确的尺寸,所以我别无选择。但仍然不知道如何将略读转换为SK位图?谢谢
SKImage snapI = e.Surface.Snapshot();
SKData pngImage = snapI.Encode();
var x= Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "FolderName");
var fullpath = x+"PicName.png";
File.WriteAllBytes(fullpath, pngImage.ToArray());
SKBitmap bitmap = SKBitmap.Decode(fullpath);
var dstInfo = new SKImageInfo(1060, 550);
bitmap.Resize(dstInfo, SKBitmapResizeMethod.Hamming);