0

カスタムで使用している画像がありますUITableViewCell。画像は透明な背景に黒い三角形で、CIColorInvertフィルターを使用して透明な背景に白い三角形にしています。

フィルタリングされた (反転された) 画像が縦に引き伸ばされています。これを防ぐにはどうすればよいですか?

UIImageフィルタリングを行わずに直接ロードすると、次のようになります。

矢印は大丈夫ですが、黒です

CIFilter私が得るものを適用すると、これは次のとおりです。

ここに画像の説明を入力

これが私のコードです:

// create the white triangle
CIImage *inputImage = [[CIImage alloc] initWithImage:
                       [UIImage imageNamed:@"TriangleRight"]];

CIFilter *invertFilter = [CIFilter filterWithName:@"CIColorInvert"];
[invertFilter setDefaults];
[invertFilter setValue: inputImage forKey: @"inputImage"];

CIImage *outputImage = [invertFilter valueForKey: @"outputImage"];

CIContext *context = [CIContext contextWithOptions:nil];

rightArrow = [UIImage imageWithCGImage:[context createCGImage:outputImage fromRect:outputImage.extent]];

どちらの場合も、UIImageView次のように画像を設定しています。

cell.arrow.image = rightArrow;

UIImageView寸法は 15x15 (IB) です。TriangleRight.png は 15x15 ピクセル、TriangleRight@2x.png は 30x30 ピクセルです。

CIFilterが画像を引き伸ばすのを防ぐために何が欠けていますか?

更新: 質問を投稿してから 5 分後、私は問題を理解しました: 自動レイアウトを使用してUIImageViewいて、明示的な高さの制約 (幅のみ) がありませんでした。明示的な高さの制約を追加すると、問題が解決しました。UIImageただし、直接使用する理由はまだ説明されていません(明示的な高さの制約がなくても)。

4

1 に答える 1

1
UIImageOrientation originalOrientation = self->imageview.image.imageOrientation;
imageview.image = [[UIImage alloc] initWithCGImage:imgRef scale:1.0     orientation:originalOrientation];

また、元の向きを使用すると修正されるはずです。

于 2013-05-05T17:27:56.000 に答える