2013-02-14 13 views
5

イメージを歪めるアンドロイドアプリを開発しています。イメージを歪ませるためにOpenGL translateとscale関数を使用しています。イメージが歪めています。しかし、機能を実装することができません。誰もがOpenGLで取り消し機能を実装する方法を助けることができます。任意の提案やコードが役立つでしょう。 ありがとうございます。どのようにアンドロイドでOpenGLでアンドゥ機能を実装する方法

+1

これはOpenGLとは関係ありません。 OpenGLはあなたが描画するよう指示するだけです。任意の元に戻す機能は、それが以前と同じように描画するように指示するものを変更することです。 –

+0

@NicolBolas実際には私は指のタッチで画像を歪めています。画像が縮小または膨らみます。質問は、私は何を保存し、どのようにビューに反映させるべきかです。 –

+0

私はあなたがそれぞれのタッチ開始時に現在の画像を保存すべきだと思います。その後、取り消しが完了したら、現在のイメージをドロップし、キュー内の最後のイメージに置き換えます。 openglを使っていくつかの操作を逆にすることもできますが、ここでそのような機能を使うべきではないと思います。オリジナルと、指で行った各操作、または各ステップの画像を保存するだけです。 – Pihhan

答えて

0

Ray Tayekが正しいです。コマンドパターンを使用します。つまり、ユーザーが実行するすべてのアクションに対して、そのアクション(コマンド)とそのアクションに関連するすべてのデータを「元に戻す」スタックにプッシュします。

簡単にするために、ペイントプログラムを見てみましょう。このプロセスはOpenGLアプリケーションに直接適用されます。ユーザは、x1、y1からx2、y2に線を引く。

command = DrawLine 
data = x1, y1, x2, y2 

あなたはおそらく、元に戻すデータのために、少なくとも2つのクラスを必要とするだろうが、彼らは小さく、容易に実現するだろう:コマンドは次のように表すことができます。ユーザーが元に戻したいときは、Undoスタックから一番上のオブジェクトをポップして見て、(コマンドの各タイプに固有の)関連する取り消しアクションを実行します。または、各コマンドオブジェクト自体に取り消しアクションを含めることもできます。次に、やり直しスタックの取り消しコマンドを押します。

これで十分です。 HTH

+0

私は上記の私の答えを修正します。 3Dグラフィックスの場合、DwBには良いアプローチがあります。元に戻すデータの一部として変更されていないイメージを使用します。 – Frecklefoot

2

あなたの状況にはコマンドパターンが不十分だと思われます。これは、歪みがどのように適用されたかを知っていても、画像の歪みを逆にするのは簡単ではないという私の前提に基づいています。

歪みを適用する直前に画像をスタックにプッシュする必要があります。次に、取り消し実装は現在のイメージをスタック上のイメージに置き換えます。これにより、やり直しと元に戻すことの組み合わせに起因する潜在的に興味深い問題につながります。

これは、コマンドオブジェクトを簡単に元に戻すことができ、簡単に元に戻すことができない変更のイメージを格納するために最適化することができます。

関連する問題