首页 > 解决方案 > 如何在 Xamarin Forms 中使用上传的图像

问题描述

我希望我的用户为我的 Xamarin Forms 应用程序的横幅上传他们自己的自定义图像。我的想法是让他们上传最高分辨率/尺寸的图像(来自 Android 的 xxxhdpi 尺寸),然后按比例缩小以(希望)保持图像的质量。有没有办法让我根据设备的屏幕找到我应该缩放多少图像?它不必是完美的。我很高兴能够简单地确定应用程序为应用程序图像选择的图像大小(即@2x、xxhdpi 等)。例如,在 iOS 上,如果应用程序使用 @3x 图像,我会将图像大小缩小 25%。这是假设上传的图像大小适用于 Android 的 xxxhdpi 大小。如果应用程序在 Android 的 xxxhdpi 屏幕上运行,则不会进行缩放。知道怎么做吗?

更新!!好的,所以我可以使用 DeviceDisplay.MainDisplayInfo.Density 来确定我正在运行的屏幕类型。我现在的挑战是如何调整我的图像控件的大小。这是我的基本想法:

我将让所有用户上传一个 400 单位高的图像(宽度几乎可以是他们想要的。)我将使用密度来计算我想使用百分比缩小图像的比例,即 Android 上的 XXX Android 上的 xx 为 100%,iOS 上的 @3 为 75%,Android 上的 X 和 iOS 上的 @2 为 50%,iOS (@1) 和 Android 的基本图像(基本 srawable 文件夹大小)将为 25 %。现在的挑战是我在哪里可以在图像控件上执行此缩放?实际上,我在多个应用程序之间共享的 ContentView 中有图像控件,因此没有 OnAppearing 可以覆盖。图像控件上是否有我可以挂钩以调整控件大小的事件。它也可能是 ContentView 的事件。

标签: image-processingxamarin.formsscreen-resolution

解决方案


您可以通过Xamarin.Essentials在 Xamarin.Forms 中获取Density您的设备,例如:DeviceDisplay

var mainDisplayInfo = DeviceDisplay.MainDisplayInfo;
// Screen density
var density = mainDisplayInfo.Density;
//for Android
var dpi = density * 160; 

那么您可以根据 dpi 来确定您的设备的尺寸(可以参考密度

mdpi    Resources for medium-density (mdpi) screens (~160dpi). (This is the baseline density.)
hdpi    Resources for high-density (hdpi) screens (~240dpi).
xhdpi   Resources for extra-high-density (xhdpi) screens (~320dpi).
xxhdpi  Resources for extra-extra-high-density (xxhdpi) screens (~480dpi).
xxxhdpi Resources for extra-extra-extra-high-density (xxxhdpi) uses (~640dpi). 

然后您可以在将值分配给图像控件之前调整图像大小

参考ImageResizer


推荐阅读