1

コミック コレクションを整理するためのアプリケーションに取り組んでいます。ユーザーは、カバー アートワークの画像を ImageWell を介してプログラムにドラッグできる必要があります。

画像をアプリケーションから再度ドラッグすることはできないため、画像を元のサイズで保存する必要はありません。ImageWell のサイズの画像で十分です。

問題は、アプリケーションで画像をどのように再スケーリングするかです。

さらに複雑なことに、ImageWell は Core Data にバインドされています。そのため、Core Data が画像を元のサイズで保存する前に、画像を再スケーリングする必要があります。

4

2 に答える 2

3

NSImage画像をスケーリングする通常の方法は、目的の小さいサイズの新しい をその上に割り当てlockFocus、元の画像を に描画することですNSImage(unlockFocusもちろん、完了したら)。そこから、CoreGraphics API を使用するか、必要が単純な場合は のTIFFRepresentationメソッドを使用して、さまざまな形式で画像をシリアル化できますNSImage

コア データの取り扱いに関しては、イメージを所有するオブジェクトとの関係を持った別のエンティティにイメージを保持することをお勧めします。その理由は、フェッチ時に Core Data がオブジェクトのすべてのデータを一度にロードするためです。そのため、画像データ (小さな画像でも非常に大きくなる可能性があります) が必要ない場合は、パフォーマンスの低下とメモリの圧迫を回避できます。フェッチするたびにメモリにロードします。image必要に応じて画像を遅延ロード/保存する一時的なプロパティをメイン エンティティに配置できます。

イメージが新しいイメージとのバインディングを適切に更新すると、イメージを再スケーリングしてデータ オブジェクトに保存する絶好の機会になります。つまり、バインディングを介してフル サイズの画像をデータ オブジェクトに渡すと、再スケーリングが処理されます。

于 2010-05-04T15:30:49.110 に答える
1

NSValueTransformer を考えてみてください。値変換器はまさにそれです...それは値を変換します。そのため、画像のサイズを変更 (例: 変換) し、値トランスフォーマーがバインディングを介して機能するようにします。インターフェイスビルダーのバインディングを見ると、「Value Transformer」セクションが表示され、そこにトランスフォーマーをフックします。トランスフォーマーには、TransformedValue メソッドと reverseTransformedValue メソッドの 2 つの主要なメソッドがあります。1 つ目はデータを画像ビューに表示するときに使用され、2 つ目は反対方向に使用されます... データがコア データ モデルに書き込まれるときに使用されます。したがって、それらはコアデータとインターフェースの間のインとアウトのメソッドです。

したがって、あなたの場合、reverseTransformedValue メソッドで (Alex が説明したように) サイズ変更を行います。必要な作業の詳細と例については、こちらを参照してください。

于 2010-05-04T16:18:55.157 に答える