1

SO には多くの質問がありますが、残念ながらそれらを使用して問題を解決できませんでした。カメラにオーバーレイ ビューを追加したので、青い枠内の画像を取得したいと考えています (ウォーター ボトルのみ)。

次のようなコードチャンクを試しました

CGImageRef imageRef = CGImageCreateWithImageInRect([largeImage CGImage], cropRect);

[UIImageView setImage:[UIImage imageWithCGImage:imageRef]]; 

CGImageRelease(imageRef);

しかし、2つの問題があります

  1. トリミングされた画像が大きくなりすぎている
  2. 方向が -90 に変わります。

ポイント1については、私が提供しているのはcropRect小さすぎると思います。そのため、ズームされたビューで画像の非常に小さな部分が表示されます。私の他の人viewControllerにはUIImageView、青い境界線内のカメラ四角形と同じサイズの(トリミングされた画像を表示する必要がある場所)があります。質問は、画像をトリミングする方法と、どの値を指定する必要があるcropRectかです。

ここに画像の説明を入力

4

1 に答える 1

0

画像サイズが 1280* 1080 で、クロップ ビューのサイズが 320*480 であると仮定すると、次の手順を実行する必要があります。

  1. 倍率を見つけて、クロップ ビューのフレームを画像サイズの四角形 (0、0、1280、1080) に変換します。

    float xScale = 1280 / 320;
    float yScale = 1080 / 480;
    
    float scaleFactor = (xScale < yScale) ? xScale : yScale;
    
  2. 倍率でcropViewフレームを乗算します。これにより、画面座標が画像サイズ座標にマップされます。次に、新しいcropRectを

    CGImageCreateWithImageInRect([largeImage CGImage], cropRect);
    

異なる向きの問題は、CoreGraphics がビューの座標系と比較して異なる座標系を使用することです。Quartz 2D Coordinate Systemsなので設定してみる

   [UIImage imageWithCGImage:imageRef].imageOrientation = largeImage.imageOrientation
于 2015-05-05T15:39:49.373 に答える