ios 代码设置控件宽高比_用宽高比调整UIImage的大小?

本文介绍了一个自定义的UIImage扩展类,该类提供了一种简单的方法来按指定尺寸缩放UIImage对象。通过使用Core Graphics和UIKit框架,该实现考虑了图像的纵横比,并解决了位图从下至上绘制的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我知道这很老了,但是感谢那篇文章-它使我从尝试使用比例尺重定向到绘制图像。万一对任何人都有利,我做了一个扩展类,我将在这里进行介绍。它允许您调整图像的大小,如下所示:

UIImage imgNew = img.Fit(40.0f, 40.0f);

我不需要合适的选项,但可以轻松扩展它以支持Fill。

using CoreGraphics;

using System;

using UIKit;

namespace SomeApp.iOS.Extensions

{

public static class UIImageExtensions

{

public static CGSize Fit(this CGSize sizeImage,

CGSize sizeTarget)

{

CGSize ret;

float fw;

float fh;

float f;

fw = (float) (sizeTarget.Width / sizeImage.Width);

fh = (float) (sizeTarget.Height / sizeImage.Height);

f = Math.Min(fw, fh);

ret = new CGSize

{

Width = sizeImage.Width * f,

Height = sizeImage.Height * f

};

return ret;

}

public static UIImage Fit(this UIImage image,

float width,

float height,

bool opaque = false,

float scale = 1.0f)

{

UIImage ret;

ret = image.Fit(new CGSize(width, height),

opaque,

scale);

return ret;

}

public static UIImage Fit(this UIImage image,

CGSize sizeTarget,

bool opaque = false,

float scale = 1.0f)

{

CGSize sizeNewImage;

CGSize size;

UIImage ret;

size = image.Size;

sizeNewImage = size.Fit(sizeTarget);

UIGraphics.BeginImageContextWithOptions(sizeNewImage,

opaque,

1.0f);

using (CGContext context = UIGraphics.GetCurrentContext())

{

context.ScaleCTM(1, -1);

context.TranslateCTM(0, -sizeNewImage.Height);

context.DrawImage(new CGRect(CGPoint.Empty, sizeNewImage),

image.CGImage);

ret = UIGraphics.GetImageFromCurrentImageContext();

}

UIGraphics.EndImageContext();

return ret;

}

}

}

按照上面的文章,它为图像启动了一个新的上下文,然后为该图像找出纵横比,然后绘制到图像中。如果您还没有完成任何Swift xcode开发时间,那么UIGraphics对于我使用的大多数系统都会有些落后,但还不错。一个问题是,默认情况下,位图从下至上绘制。为了解决这个问题,

context.ScaleCTM(1, -1);

context.TranslateCTM(0, -sizeNewImage.Height);

将图形的方向更改为更常见的左上角到右下角...,但是随后还需要移动原点,因此也需要移动TranslateCTM。

希望它可以节省一些时间。

干杯

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值