Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xamarin 将SKSurface转换为SKBitmap,并将大小调整为不同设备大小上特定大小的图像_Xamarin_Xamarin.forms_Skiasharp - Fatal编程技术网

Xamarin 将SKSurface转换为SKBitmap,并将大小调整为不同设备大小上特定大小的图像

Xamarin 将SKSurface转换为SKBitmap,并将大小调整为不同设备大小上特定大小的图像,xamarin,xamarin.forms,skiasharp,Xamarin,Xamarin.forms,Skiasharp,我有一个Xamarin表单视图,根据触摸事件我可以改变图像 <StackLayout > <skia:SKCanvasView x:Name="canvasView" PaintSurface="ImageCanvas_PaintSurface" EnableTouchEvents="True"

我有一个Xamarin表单视图,根据触摸事件我可以改变图像

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