問題タブ [graphicscontext]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - UIImage にクリッピング パスを追加し、クリップされたバージョンを Documents フォルダーに保存して表示する
私のアプリでは、ユーザーは UIImage から始めます。ユーザー入力に基づいて、アプリは画像の特定の部分の周りにクリッピング パスを作成します。次に、クリップしたバージョンをアプリの Documents ディレクトリに保存して、後で表示できるようにしたいと考えています。
私が知る限り、クリップされた画像を後で表示することを除いて、すべてが順調に進んでいます。(カスタム ビューを追加して) 画像を表示しようとするとすぐに、さまざまなinvalid context
エラーとmessage sent to deallocated instance
. 最後の 1 つは何が原因なのかわかりませんinvalid context
が、グラフィック コンテキストの概念にまったく慣れていないため、これが最も懸念されています。
正確なエラーは次のとおりです。
この時点で、クリッピング パスを作成するコード、クリッピングされた画像のコンテキストを新しい画像として保存しようとするコード、最後に画像を再度表示しようとするコードを投稿します。上で述べたように、画像を再度表示しようとするまでエラーは発生しません。
クリッピング パスを作成します。
上記の contexts と contextRefs で行っているほとんどすべてのことは、私にとって完全な魔法です。これは、ここ SO の他の投稿からまとめたものであり、基本的にそれが何をしているのかわかりません。これらすべてのコンテキストエラーが発生したのは衝撃的ですよね?;)
画像を保存してからすぐに表示しようとしています (最終行でエラーが発生します):
クラスはShowImage
単純なUIView
サブクラスです。UIImage
指定されたで初期化されるだけで、そのdrawRect:
メソッドは次のとおりです。
上記のメソッドの単一行drawRect:
が呼び出される前でもエラーが発生することに注意してください (その行にブレークポイントを設定しようとしましたが、アプリが最初にクラッシュします)。
大量のコードであることはわかっていますが、これは、このコードのデバッグをどこから開始すればよいかさえわからないためです。私の特定の問題を解決することに加えて、コンテキストの使用/誤用をより広く扱う回答が欲しいです。
linux - 別のプロセスで GC (X11 グラフィックス コンテキスト) を使用する
process1 から process2 に GC を渡してそこで使用することは可能ですか (クリッピング領域を更新する必要があります)。
ウィンドウプロパティを介してGCを渡そうとしました。しかし、その GC の XSetRegion 呼び出しで SEGFAULT を取得しました。
ios - iOS では、コンテキストからレイヤーを作成し、レイヤーのコンテキストを取得した後、これらのコンテキストは互いにどのように関連するのでしょうか?
現在のグラフィックス コンテキストからレイヤーを作成し、レイヤーのコンテキストを取得できます。
これで、 と の 2 つのコンテキストができcontext
ましcontextOfLayer
た。これらの 2 つのコンテキストは互いにどのように関連していますか? contextOfLayer
実際にはレイヤー コンテキスト ポインターの一部であり、その配列を持っていますかcontext
? context
を使用してアドレスを印刷すると、アドレスNSLog(@"%p", ...)
が異なるため、同じオブジェクトではありません。コンテキストスタックには影響しないと思いますcontextOfLayer
が、それは単に独立したコンテキストであり、それ自体が「そこに存在する」ようなものですか?
iphone - UITableView / UIScrollViewの完全なコンテンツのUIImageをキャプチャして、iOSデバイスで動作させるにはどうすればよいですか?
私はこの素晴らしくエレガントなコードを使用して います。UIImageにエクスポートされるUITableViewのコンテンツ全体をキャプチャするためのオフスクリーン部分を含む、UIScrollViewのスクリーンショットを取得しています。
シミュレーターでは非常にうまく機能しますが、iOSデバイス(iphone 4s)でこのコードを実行すると、このメソッドが呼び出されると、次のエラーが大幅に増加します。
エラー:
このコードは、テーブルビューのコンテンツサイズがその範囲内にある場合にうまく機能しますが、その範囲よりも大きくなると(1ピクセルでも)、上記のエラーの無限のループに入ります。ただし、これはデバイスでのみ発生します。シミュレーターではありません。
何か案は?
ios - グラフィックスコンテキストの概念はファイルハンドルに非常に似ていますか?(iOSおよびその他のシステムの場合)
グラフィックスコンテキストという用語は、少し抽象的である場合があります。それらは実際にはシステムリソースですか、ファイルハンドルがハードドライブまたは任意の永続ストレージデバイスからのシステムリソースであるのと同じように、グラフィックカードからのリソースですか?
ファイルハンドルに読み取り専用か読み取り/書き込み用か、および次の読み取り操作の現在の位置に関するいくつかの状態があるのと同じように、グラフィックスコンテキストには、現在のストロークの色、ストローク幅、または関連データ。(更新:書き込みモードでは、グラフィックスコンテキストのキャンバスがあり、その上に物を描画するのと同じように、200MBのファイル内の任意の場所に移動してデータを変更できます)
したがって、グラフィックスコンテキストは、実際にはグローバルなシステム全体のリソースです。ファイルまたはファイルハンドルが(必然的に)アプリケーションシングルトンの一部ではないのと同じように、これらはアプリケーションシングルトンなどの一部ではありません。
また、強力なグラフィックカードがない場合(またはグラフィックカードのリソースがすでに不足している場合)、オペレーティングシステムは、グラフィックカードに処理させる代わりに、ビットマップを使用した低レベルのグラフィックルーチンを使用してグラフィックコンテキストをシミュレートできます。
これは、iOSやその他の一般的なOS全般で、グラフィックスコンテキストが実際にどのように機能するかを示していますか?
iphone - iOS で、既存のグラフィックス コンテキストを使用してレイヤーを作成する必要があるのはなぜですか?
重複の可能性:
iOS では、コンテキストからレイヤーを作成し、レイヤーのコンテキストを取得した後、これらのコンテキストは互いにどのように関連していますか?
iOS ではCGLayerCreateWithContext
、既存のグラフィックス コンテキストを使用して を実行でき、 を取得できます。CGLayer
また、 を使用してこの CGLayer のグラフィックス コンテキストを取得することもできますCGLayerGetContext
。
CGLayer
既存の Graphics Context を使用してこれを作成する必要があるのはなぜですか? グラフィックス コンテキストが存在しない状態で作成することはできませんか? このレイヤーのグラフィックス コンテキストを取得すると、元のグラフィックス コンテキストとどのように関連するのでしょうか? それらは、2 つの別個の独立したグラフィックス コンテキストではないでしょうか?
ios - iOSの場合、UIGraphicsBeginImageContextWithOptionsを使用してImageContextを作成した後、そのサイズを取得する方法はありますか?
次を使用して画像コンテキストを作成する場合:
後でコンテキストのサイズを取得する方法はありますか?コンテキストから画像を取得する場合、サイズは確かにありますが、描画中に、画像の幅とサイズを取得する方法もありますか?
ios - UIGraphicsBeginImageContext が CGBitmapContextCreate を使用してグラフィックス コンテキストを作成することは確かですか?
UIGraphicsBeginImageContext
を使用CGBitmapContextCreate
してグラフィック コンテキストを作成します [更新:ドキュメントで見つけられません]。したがって、グラフィック コンテキストはどちらの方法でもまったく同じですか? 私もステップインしようとしましUIGraphicsBeginImageContext
たが、デバッガーでステップインできません。
ios - iPad 2と新しいiPadでのCGLayerCreateWithContextの奇妙な動作?
シングルビューアプリでは、FooViewがメインビューです。FooViewのdrawRect
場合、
そして、ビューコントローラCADisplayLink
を呼び出すメソッドを呼び出すためにを使用しているので、プロパティを使用して1フレーム、5フレーム、または20フレームごとに呼び出されます。[self.view setNeedsDisplay]
drawRect
frameInterval
iPad2では、CGLayerが数百の6x6ポイントの長方形で埋められたときに描画する時間は、NSLogステートメントで出力されるように、約0.011〜0.012秒です。これは60fpsが可能です。(60fpsはフレームあたり0.01666秒です)
行を次のように変更した場合:
(NULL
の代わりに使用context
)。その場合、時間は約0.014秒ですが、これは60fpsでも十分です。
しかし、新しいiPadでは、逆のことが起こっています。context
その回線で使用された場合、時間はなんと0.17秒になります...これは、6fpsでも適切ではありません。を使用する場合NULL
、時間は0.038であり、60 fpsには適していませんが、少なくとも20 fpsには適していますが、それでも許容範囲です。なぜそれがこのように動作しているのか、そしてそれをiPad、iPad 2、そして新しいiPadのすべてのプラットフォームでうまく機能させる方法やより良く機能させる方法を知っている人はいますか?
で呼び出すCGLayerCreateWithContext
とNULL
GPUキャッシュグラフィックコンテキストが与えられ、で呼び出すとビットマップコンテキストが与えられる場合、iPad 2で呼び出すとcontext
実際に高速になるのはなぜですか?CGLayerCreateWithContext
context
(私は新しいiPadでiOS 5.1.1を使用しており、iPad2でiOS5.1を使用しています...それほど違いはないはずです...そしてiPad2をアップグレードして別のiPadを使用できるようにしたくありません私のアプリに対してテストするための異なるiOSバージョンのデバイス)。
ios - iOS では、GPU にキャッシュされたグラフィックス コンテキストを取得するにはどうすればよいですか?
おそらく最初の質問は、グラフィック コンテキストを GPU にキャッシュすることは有用か、可能かということです。iPad 1、2、および新しい iPad では、PowerVRが GPU として使用され、RAM がグラフィック メモリとして使用されますか? もしそうなら、GPU にキャッシュされたグラフィックス コンテキストを取得することはできますか?
実際にそれが可能である場合、どのようにしてそのようなグラフィックス コンテキストを取得するのでしょうか? CGLayer
およびCALayer
:はCGLayer
GPU にキャッシュでき、CALayer
多くの場合 GPU にキャッシュされますがCGLayer
、別のコンテキストから取得CGLayerCreateWithContext
されます。 iOS ではなく、Mac OS X のグラフィックス コンテキスト。display
「View Graphics Context」を取得する方法について述べた部分は、実際には CALayer で取得されたものと同じコンテキストdrawInContext
ですdrawRect
。UIView
このビットマップ コンテキストを使用すると、CALayer が GPU にキャッシュされるという考えが実際にこのビットマップ グラフィックス コンテキストを意味するのか、それとも CGImage を意味するのかlayer.contents
はわかりません。そのため、キャッシュは実際にはグラフィックス コンテキストではなく、この画像上にあります。