2012-01-16 12 views
0

私はCocoaの初心者ですが、NSImageにはいくつかの疑問があります。境界の原点を変更+画像を切り取る

Question1:

画像の境界原点を変更するには何の影響も与えていないようです。私はイメージが新たに設定された起源から引き出されることを期待しましたが、そうは思われません。何か不足していますか?

コード:

NSImage* carImage = [NSImage imageNamed:@"car"]; 

[self.imageView setImage:carImage]; 

//Following line has no effect: 
self.imageView.bounds = CGRectMake(self.imageView.bounds.origin.x + 100, self.imageView.bounds.origin.y, self.imageView.bounds.size.width,self.imageView.bounds.size.height); 

:ImageViewのは

Question2 IBOutletです:

私は画像をトリミングしようとしていたが、それはしていないようです画像をトリミングすると、完全な画像が表示されます。私は何が欠けているのですか?

コード:

NSRect sourceRect = CGRectMake(150, 25, 100, 50); 
NSRect destRect = CGRectMake(0, 0, 100, 50); 

NSImage* carImage = [NSImage imageNamed:@"car"]; 

[carImage drawInRect:destRect fromRect:sourceRect operation:NSCompositeSourceOver fraction:1.0]; 

[self.imageView setImage:carImage]; 

おかげ

答えて

2

は、画像の境界原点を変更しても効果があるとは思われません。画像ビュー、画像ではないのです...

//Following line has no effect: 
self.imageView.bounds = CGRectMake(self.imageView.bounds.origin.x + 100, self.imageView.bounds.origin.y, self.imageView.bounds.size.width,self.imageView.bounds.size.height); 

ビューの境界を変更する効果は、ビューが描画する内容によって異なります。 NSImageViewがどのようにイメージを描画するかを正確に予測することはできないため、実際には、作成したビュークラスのインスタンスではないビューの境界を変更しないでください(おそらく、その細胞が関与しているが、それ以上には、私は頼りにしない)。

さらに一般的には、ビューの境界の起点を変更することはほとんどありません。私はそれをやったことを覚えていない、私はそれを行うために私の頭の上の理由を考えることができません。範囲のサイズを変更すると、切り抜きではなく縮尺されます。

イメージをトリミングしようとしましたが、イメージをトリミングしていないようですが、完全なイメージが表示されます。私は何が欠けているのですか?画像については何も変更されません描画する画像を告げる

[carImage drawInRect:destRect fromRect:sourceRect operation:NSCompositeSourceOver fraction:1.0]; 

[self.imageView setImage:carImage]; 

。その後、画像が小さくなるか大きくなるように、「画像をトリミングする」ことはありません。あなたはそれを描くように言います、それ以上はありません。

結果として、その後のステートメントは、描画するように指示していない場合とまったく同じように、イメージビューのイメージをイメージ全体に設定します。

描画するイメージを指定するのは、正確には次のとおりです。イメージを描画するように指示します。ビューまたは画像へ

  1. lockFocus間とunlockFocusのメッセージで(または現在のNSGraphicsContextを設定した後):2つだけ正しいことを行うための場所があります。
  2. ビューのdrawRect:メソッド内。

それ以外の場合は、描画するココアオブジェクトを指定しないでください。

画像をトリミングする正しい方法の1つは、希望の/調整されたサイズの新しい画像を作成し、その画像にフォーカスを固定し、元の画像の所望の部分をその中に描画し、元のバージョンと切り取ったバージョンの両方が表示されます。

もう1つの正しい方法は、描画するイメージを所有するイメージと、長方形を保持するイメージの2つのプロパティを持つ独自のカスタムイメージビューを作成することです。描画するように指示されたとき、このカスタムビューは、画像に、指定された矩形をビューの境界に描画するように指示します。その後、常に元の画像を保持して、目的のセクションのみを描画します。

+0

Peterさん、ありがとうございました。あなたの答えは本当に役に立ちました! – user1046037

関連する問題