我有两张照片。第一个(avatar
)是640x640,第二个(like
)是21x20。
当我第一次尝试绘制第二个时,我得到它,但质量非常低。
这是代码:
var bounds = targeImageView.Bounds;
CGImageAlphaInfo alphaInfo = CGImageAlphaInfo.PremultipliedLast;
CGColorSpace colorSpaceInfo = CGColorSpace.CreateDeviceRGB ();
CGBitmapContext resultBitmap = new CGBitmapContext (IntPtr.Zero, (int)bounds.Width, (int)bounds.Height, 8, 4 * (int)bounds.Width, colorSpaceInfo, alphaInfo);
resultBitmap.DrawImage (bounds, avatar.CGImage);
var likeY = 0;
var likeX = 0;
var likeHeight = (float)Math.Floor (bounds.Height / 2);
var likeWidth = likeHeight;
resultBitmap.DrawImage (new RectangleF (likeX, likeY, likeWidth, likeHeight), like.CGImage);
targetImageView.Image = UIImage.FromImage (resultBitmap.ToImage ());
以下是同一图片视图中的avatar
图片,但没有高级代码,只有imageView.Image = avatar;
这是相同的但是在绘制之后。
答案 0 :(得分:1)
你的视力比我好 - 至少在那么小的范围内。如果它是一个视网膜问题(我想是这样),那么下面的代码应该可以帮助你,因为它创建了一个上下文,可以将自己调整为视网膜(或不显示)。
UIImage avatar = ...;
UIImage like = ...;
UIGraphics.BeginImageContextWithOptions (avatar.Size, false, 0);
using (CGContext ctx = UIGraphics.GetCurrentContext ()) {
var rect = new RectangleF (Point.Empty, avatar.Size);
avatar.Draw (rect);
// coordinates are likely reversed (UIKit wrt CoreGraphics) you might have to fix them (untried)
rect = new RectangleF (0, avatar.Height / 2, avatar.Width / 2, avatar.Height / 2);
like.Draw (rect);
targetImageView.Image = UIGraphics.GetImageFromCurrentImageContext ();
UIGraphics.EndImageContext ();
// dispose of avatar and like UIImage if not used anymore
}
答案 1 :(得分:1)
使用PNG,它们是无损的,质量比JPG或Bitmap好。
NSData * imageData = UIImagePNGRepresentation(image);
UIImage * image = [UIImage imageWithData:data];
使用CGRectMake()为框架分配UIImageView以进行放置。您可以将图像浮动到任何您想要的位置。
使用[ImageView setImage:...]
图像将变得更清晰,您可以完全控制质量和位置。
我使用压缩到15px x 15px的256幅图像,它仍保持非常好的形状。相比之下,我也反过来拉伸图像。