ImageHandlers 和 GetEncoder 在当前上下文 xamarin 中不存在,该怎么办?

Posted

技术标签:

【中文标题】ImageHandlers 和 GetEncoder 在当前上下文 xamarin 中不存在,该怎么办?【英文标题】:ImageHandlers and GetEncoder doesnt exists in current context xamarin, what to do? 【发布时间】:2021-04-18 10:46:58 【问题描述】:

我需要创建缩略图以节省应用程序的性能我有这段代码,它写给我 GetEncoder 和 ImageHandlers 在当前上下文中不存在。你知道为什么它不起作用吗?您还知道如何制作缩略图的更好方法吗?

代码如下:

public static void CreatePreviewImage(string imageFullFilename, string previewFullFilename)
    
        ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg);
        // Create an Encoder object based on the GUID  
        // for the Quality parameter category.  
        System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality;
        // Create an EncoderParameters object.  
        // An EncoderParameters object has an array of EncoderParameter  
        // objects. In this case, there is only one
        // EncoderParameter object in the array.  
        EncoderParameters myEncoderParameters = new EncoderParameters(1);
        EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 75L); //default
        myEncoderParameters.Param[0] = myEncoderParameter;

        Bitmap originalimage = (Bitmap)System.Drawing.Image.FromFile(imageFullFilename, true);
        originalimage.SetResolution(72, 72);

        int w = originalimage.Width;
        int h = originalimage.Height;
        int pw = 0;
        int ph = 0;

        h = originalimage.Height * w / originalimage.Width;

        if (w > h)
        
            pw = 200;
            ph = h * pw / w;
        
        else
        
            ph = 200;
            pw = w * ph / h;
        

        Bitmap previewImage = ImageHandlers.ResizeImage(originalimage, pw, ph);
        previewImage.Save(previewFullFilename, jpgEncoder, myEncoderParameters);
    

【问题讨论】:

System.Drawing 在 Xamarin 上不受支持。您可以使用 SkiaSharp 之类的跨平台库或平台原生 API 来代替。 谢谢,我会这样做的。 @LukasPlanespotter 关于在 Xamarin Forms 中创建 Thumbnails,你可以看看这个:forums.xamarin.com/discussion/58342/… 【参考方案1】:

我用过 Skiasharp 并且效果很好:

var resizedImage = bitmap.Resize(new SKImageInfo(newWidth, newHeight), SKBitmapResizeMethod.Lanczos3);

【讨论】:

以上是关于ImageHandlers 和 GetEncoder 在当前上下文 xamarin 中不存在,该怎么办?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET - 如何在浏览器中显示图像而不将图像保存在临时文件中?

& 和 && 区别和联系,| 和 || 区别和联系

第三十一节:扫盲并发和并行同步和异步进程和线程阻塞和非阻塞响应和吞吐等

shell中$()和 ` `${}${!}${#}$[] 和$(()),[ ] 和(( ))和 [[ ]]

Java基础8---面向对象代码块和继承和this和super和重写和重载和final

Java基础8---面向对象代码块和继承和this和super和重写和重载和final