0

我有两张图片。第一个 ( 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;

头像

这是相同的,但在绘制之后。

在此处输入图像描述

4

2 回答 2

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
}
于 2012-12-20T22:58:37.043 回答
1
  1. 使用 PNG,它们是无损的,并且质量比 JPG 或位图更好。

    NSData *imageData = UIImagePNGRepresentation(image);

    UIImage *image=[UIImage imageWithData:data];

  2. 使用 CGRectMake() 分配带有框架的 UIImageView 用于放置。您将能够将图像浮动到任何您想要的位置。

  3. 使用 [ImageView setImage:...] 设置 ImageView 的图像

  4. 图像将呈现得更清晰,您将完全控制质量和位置。

我使用了一个 256 图像压缩到 15px x 15px 并且它仍然保持非常好的形状。相比之下,我也以相反的方式拉伸图像。

于 2012-12-21T02:40:13.923 回答