image-processing - 如何在 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 的事件。
解决方案
您可以通过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).
然后您可以在将值分配给图像控件之前调整图像大小
推荐阅读
- mysql - MySQL使用子查询删除重复数据
- c# - C# 为什么将对象添加到我的 List<> 会替换所有其他项目?
- java - NavigationView 与 useroffroute MapBox Android
- oracle - 我得到逗号分隔的 ID,我必须在 Oracle 存储过程中的 where 子句中传递它
- swift - 如何在 URLSession Swift 中获取响应正文?
- azure-data-explorer - ADX VM 的 SKU 比较
- node.js - 我如何在邮递员中授权我的 jwt 令牌
- amazon-web-services - 何时为用户使用 IAM 角色与 IAM 组?
- javascript - 如何通过单击 jQuery 中的 html 表来添加任何行
- php - 在 Laravel 应用程序中访问全局变量的问题