MonoTouch:在 Retina 显示屏上调整色调时外观图像尺寸加倍

2023-12-06

我正在使用此代码设置导航栏的背景,该代码在视网膜和非视网膜显示器中效果很好。有一个@2x 和普通图像。所以,一切都好:

UINavigationBar.Appearance.SetBackgroundImage(
     GetImage(ImageTheme.menubar), UIBarMetrics.Default);

现在,当我应用这个ChangeHue()对图像进行变换以调整其色调,在 Retina 上显示图像的大小是原来的两倍。非视网膜显示器没问题:

    UINavigationBar.Appearance.SetBackgroundImage(
       ChangeHue(GetImage(ImageTheme.menubar)), UIBarMetrics.Default);
    ...

    UIImage ChangeHue(UIImage originalImage){
        var hueAdjust = new CIHueAdjust() {
            Image = CIImage.FromCGImage(originalImage.CGImage),
            Angle = hue * (float)Math.PI / 180f // angles to radians
        };

        var output = hueAdjust.OutputImage;
        var context = CIContext.FromOptions(null);
        var cgimage = context.CreateCGImage(output, output.Extent);
        var i = UIImage.FromImage(cgimage);
        return i;
}

以下是应用色调后非视网膜和视网膜显示的结果:

Non-Retina

Retina


忽略这些 HACK,并在您的ChangeHue method:

var i = UIImage.FromImage(cgimage);

改为这样做:

float scale = 1f;
if (UIScreen.MainScreen.RespondsToSelector (new MonoTouch.ObjCRuntime.Selector ("scale"))) {
    scale = UIScreen.MainScreen.Scale; // will be 2.0 for Retina 
}
var i = new UIImage(cgimage, scale, UIImageOrientation.Up);

这应该返回一个UIImage具有正确“比例”信息的对象可以正确显示在UINavigationBar.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MonoTouch:在 Retina 显示屏上调整色调时外观图像尺寸加倍 的相关文章

随机推荐