0

2つの画像があります。最初の(avatar)は640x640、2番目の(like)は21x20です。最初に2番目に描画しようとすると、それが得られますが、品質は非常に低くなります。コードは次のとおりです。

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. 画像はよりきれいにレンダリングされ、品質と配置を完全に制御できます。

15px x 15pxに圧縮された256の画像を使用しましたが、それでも非常に良好な形状を保っています。対照的に、私は逆に画像を引き伸ばしました。

于 2012-12-21T02:40:13.923 に答える