0

シンプルなiPad画像コラージュアプリに問題があります。さまざまなUIImageViewをドラッグアンドドロップできるUIImageViewがあります。ドラッグしたビューは、回転および拡大できます。ユーザーが画像の編集を終えたら、すべての画像を最終的な画像にマージします。私の解決策は、UIGraphicsを使用して大きな画像を描画し、次にすべてのサブビューをループしてコンテキストで描画することでした。

- (UIImage*)mergeImages
{
    CGSize imageSize = imageView.frame.size;
    UIGraphicsBeginImageContext(imageSize);

    [imageView.image drawInRect:CGRectMake(0, 0, imageSize.width, imageSize.height)];

    [[imageView subviews] enumerateObjectsUsingBlock:^(id object, NSUInteger index, BOOL *stop) {

        UIImage *imageOriginal = ((UIImageView*)object).image;
        CGRect rect = ((UIImageView*)object).frame;

        UIImage *imageToAdd = [self scaleImage:imageOriginal :rect.size];

        // Find the w/h ratioes
        float widthRatio = rect.size.width / imageOriginal.size.width;
        float heightRatio = rect.size.height / imageOriginal.size.height;

        // Calculate point to draw at
        CGPoint pointToDrawAt;
        if (widthRatio > heightRatio)
            pointToDrawAt = CGPointMake(rect.origin.x + (rect.size.width / 2) - (imageToAdd.size.width / 2), rect.origin.y);
        else
            pointToDrawAt = CGPointMake(rect.origin.x, rect.origin.y + (rect.size.width / 2) - (imageToAdd.size.height / 2));

        [imageToAdd drawAtPoint:pointToDrawAt];

    }];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();    

    // Save image in photogalery
    UIImageWriteToSavedPhotosAlbum(newImage, nil, nil, nil);

    return newImage;
}

上記は、画像が回転していない限り問題なく機能します。だから私の質問は:

サブビューから回転角を見つける方法はありますか、それともUIViewをサブクラス化してプロパティにする必要がありますか?または、画像をマージして、角度やフィルターなどの描画固有のプロパティを取得する別の方法はありますか?

私がさらなるコードまたは何かを手伝うことができるならば、ただコメントしてください。そして、事前に感謝します:)

4

1 に答える 1

0

UIImagesには、クエリ可能な「imageOrientation」というプロパティがあります。これがわかったら、CGAffineTransformをコンテキストに適用して、画像を表示どおりにレンダリングすることができます。これに関する最近の投稿がありました-過去数日間-'CGAffineTransform'で検索すると、それ(または同様の投稿)を見つけて、それがどのように行われたかを確認できるはずです。

于 2012-08-23T11:25:11.150 に答える