0

サポートされていない (XCode で) ファイル形式を表示するアプリに取り組んでいます)。そのNSBitmapImageRepため、サブクラス化して のサブクラスで表示しましたNSImaageView。比例してスケーラブル (上下) になるように設定しました。ここで、ビットマップでピクセルの座標を取得する可能性を追加する必要があります。だから私は、mouseDown: メソッドを ovveride しました:

- (void)mouseDown:(NSEvent *)theEvent
{
    NSLog(@"mouseDown: %ld", [theEvent clickCount]);
    NSPoint point = [theEvent locationInWindow];
    NSLog(@"point x: %f and y: %f", point.x, point.y);    
}

NSPoint を取得した後、それをビットマップの座標に変換しようとする必要がありますが、最初に locationInWindow がNSPointを返すという問題を解決する方法NSImageViewがわかりませんNSImageView。マージンをクリックすると、mouseDown イベントがNSPointそのマージンに返されます。私が何をすべきか分かりますか?

4

1 に答える 1

0

マトリックスをイメージするにはビューが必要です。これは、ビュー座標を画像座標にマップするマトリックスです。通常、スケールと変換の組み合わせになります。

最初に、イメージを拡大縮小して全体が表示されるようにするか、ウィンドウ内に収まるようにするか、ウィンドウ全体を占めるようにするかを決定する必要があります。(または、ウィンドウのサイズに関係なく、常に 1:1 で画像を表示するなどの他のオプションがあります。) これにより、画像のスケールが決まります。

次に、スケーリングされた画像の配置方法を決定する必要があります。常にウィンドウに収まるようにスケーリングし、パディングがある場合、ウィンドウの左と上を優先しますか、それとも常に中央に配置しようとしますか? 常にウィンドウを埋めるようにスケーリングされている場合、ウィンドウの垂直方向または水平方向の中央に配置されていますか? それとも常にウィンドウの左下に画像の原点が表示されていますか?

スケールと変換を把握したら、2 つのマトリックスから 1 つのマトリックスを作成できます。それが完了したら、行列の逆を取得します。これにより、ビュー座標が画像ピクセルに変換されます。

于 2013-06-01T04:13:51.460 に答える