C言語では#とGDI +雑誌フリップアニメーション時間を達成するために:2010-01-13 blog.csdn.netデューク- 説明:私は、電子雑誌は、以前のプロジェクトに関わっています、実生活雑誌フリップアニメーションのシミュレーションを達成するために必要でした、他の人が記事をお勧めします、そして最終的に私が望む効果を達成するため、今日、この記事では、ビットを変換しようとします。英語能力を助けたいと思うことは良い仲間ではありません。:HTTP:あなたの英語力が十分であれば、私はあなたがでオリジナルの英語サイトを読むことをお勧めします// www.codeproject.com/KB/GDI-plus/TurnThePage.aspx、そしてあなたは私の翻訳レベルを許すことを願っています。 はじめに 、図1のフリップ効果は、 この記事では、電子書籍や電子アルバム、この本ページはフリップ効果を模倣状況の現実に側で画像表示面の作成時に効果を反転する方法について説明します。 背景 需要の画像を表示するために使用される再利用可能なコンポーネントから、この記事を書くことでインスピレーション。私はCの使用#.NETプログラミングのグラフィックイメージの私の理解を向上させ、GDI +を。 技術的な背景が記事から来てこの効果を作成する時に、「フリップ効果をFalshMX」:HTTP:// www.oreillynet.com/pub/a/javascript/2004/09/03/flashhacks.html、著者はシャムBhangalです。ページの可視部分を制御するために記事にアニメーションの対称線を使用する方法偽。対称線がページを用いて算出されたプロセスが、やや異なるのFlash MXでGDI +で、このコンセプトの目に見える部分は同じです。 この記事では、3ページと4ページが現在のページで、次のアクションが5ページと6ページを回すためにあることを前提としています。言い換えれば、我々は、4ページのフリップ効果で示したいと思います。 アニメーションの技術 次の図は、アニメーションの全領域における重要分野と変化を示しています。 2つの重要な領域とのパラメータ ネットワークプログラミングエントリから紙:HTTP:// www.bianceng.cn/Programming/csharp/201001/14287.htm 次のようにページ全体のアニメーションをまとめることができます: 1 、完全にページ3と4を引き出しますページ。描画が完了した後、B及びCは、部分的に元の可視部分の4ページの不明瞭されるであろう。 図2に示すように、対称線を計算して、作物の領域B及びCれます。 3 、描画セクションB. これは部分領域(6ページ)を下回っています。 4 、対応する変換ホットスポット、それに応じて回転に応じ。 5 、描画パートC. これは、その裏面(ページ5)中にページめくり4に表示されるコンテンツページです。 現在のページは、 「フリップ効果をFalshMX、」記事は、現在のページフリップ効果に関与していないと指摘しました。これは、それぞれの側(3ページと4ページ)は、第1の任意の切断なしに行われるとコンバージョンページが上に描かれることを意味します。B及びCは、このページ上に描画するための2つの可視部分であろう。 ホットスポット 「ホット」私はオーバーの記事で「FalshMXフリップ効果」から借りた言葉です。ページの横軸上の代表的な折り目用語ホットスポットの位置、対称線の開始位置を示します。転換の過程で、それがブックこの距離からのページの真ん中に熱い縁部との間に移動されました。ホットスポット(X)からこのページにページフリップ側から変化します。ホットスポットは、X、アニメーションが停止し、本の中間位置に到達したとき = PAGE_WIDTH。 対称線の 折り目線は、対称ページめくりを表します。ページの可視部分に参加するページを計算するために使用されます。プロセスでは、二つの対称の制御ラインは: 1 、B、及びCの部分は領域をトリミング。 ネットワーク・プログラミング・エントリから、この記事:HTTP:// www.bianceng.cn/Programming/csharp/201001/14287_2.htm 2 部、Cは、変換座標原点。 対称の線は、次の2つの式によって記述することができる: A = 45 +((45 * X)/ PAGE_WIDTH) H = X タン(a)の 角度は、xの変化に伴って変化することに注意してください。この式は、X示し = 0 = 45°とPAGE_WIDTHは= A = X 90度。 アニメーションが始まり、X- = 0、セクションBとCはそう見えません。Xが増加するにつれて、対称線は、斜辺を形成します。対称、X及び高さhのライン:三角形は3つの長さによって決定されます。図2は、このような状況を示しています。 xの増加に伴い、H表示されます > = PAGE_WIDTHの例を。これが発生すると、対称交差する三角形のラインでページ領域が台形になります。台形の高さはPAGE_WIDTHです。図1の場合です。 三角形または台形のいずれかで、このルートはB及びCは、2つの切断領域を示し閉じられます。鋸フレームと、この操作の効果を確認するには、このパラメータINCLUDE_DRAW_GRAPHICS_PATHに提供されたソースコードは、ライン上でtrueに設定されています。プログラムは、黄金分布の閉じたパスの外に描画されます。 部分領域 このセクションでは、部分BおよびCの後に目に見える部分(4ページ)に回転ページを低減することです リージョンパートB の他のページのパートBは、この例では中央のセクションは、6ページに表示され、ページの下に反転しています。パートBは、カット部分の閉曲線ページから形成されている対称線を有する領域です。このセクションの上にページ(4ページ)の対応する部分を直接切断します。明らかに、(増加にも)は、xの増加に伴って、目に見える部分が増加します。 領域部分AとBとの間の関係を見るために、設定INCLUDE_UNDERSIDE_PAGE_IN_ANIMATION変数が偽に設定されています。これは、アニメーション部Cから削除されます。 C領域の部分 画像領域Cは、反転されるバックページの画像部分を表します。この場合、Cは、5ページの可視部分の一部の領域を表します。パートCは、対称線で指定されたが、それはページ(対称線の左側)のこの側にあるされています。4ページをめくる場合、例えば、パートBは、ページ6の右下部分になり、部分Cは、5ページの左下の部分であろう。図3は、BとCとの関係を示す図 図関係3 B及びC。 ネットワーク・プログラミング・エントリから、本明細書:HTTP:// www.bianceng.cn/Programming/csharp/201001/14287_3.htm 部分C領域を描画するとき、我々は、背景画像を使用します補助、pageUndersideImageです。画像領域のこの減少は、対称の新しいラインによって決定されます。5ページの画像が内部新しいバッファに描画され、この新しい画像は、描画の領域Bの部分に近くなります。 B及びCは、一部の領域に接続されている 背景画像部分Cの準備ができ、以下の工程により描画される: まず、フォーカスを調整する座標系。 システム180回転座標 - 図2A度、図4の関係を理解参照。 パートCは、それぞれの座標(画像に描画領域を含ん - -X-、PAGE_HEIGHT)。図5は、このような回転を示します。 図は、対称の線の角度と一致するように調整 図を5回転座標系 Iは、部分領域B及びCは、対称の線に沿って配置されて見つけたので(4ページ上の赤色画素のいくつかのため)「血液側」に感受性の現在のページの色の非常に困難です。私は部分領域BまたはCを描くとき、私は回避策を使用:pixeloffsetmodeはpixeloffsetmodeにグラフィックオブジェクトを指定した。半分が描か。 G .PixelOffsetMode = PixelOffsetMode。ハーフ。 私は、また、描画ピクセル(又はマイナス1ピクセル)を増加させる前に、部分領域Cは、座標回転を防止することができることを見出した「血液側」。 PathTranslationMatrix .translate((フロート)+ hotSpot.Origin.X 1、。 (フロート)hotSpot.Origin。Y); trueに設定し、ソースコード内に設けられた回避策をpixeloffsetmodeするために、USE_PIXEL_MODE_OFFSET。 - ネットワーク・プログラミング・エントリからこの記事:HTTP:// www.bianceng.cn/Programming/csharp/201001/14287_4.htm 描かれたアニメーションは、 アニメーションの各フレームはtimer1_Tick法におけるバッファCurrentShownBitmapオブジェクトに描画されます。CurrentShownBitmap方法は、画面上に描画することだけです。 機能を中心に説明 アニメーションの各フレームで計算し、パートCの画像Bは、以下の方法により行われる: プライベート GraphicsPath GetPageUnderGraphicsPath(INTのX、 refdouble A、int型の高さ、INT幅、 BOOL isUnderSide、TurnType型) パラメータxが表示されるべき現在のページの高さと幅(前述)、高さと幅のパラメータを代表するホットスポットでページの端からの距離を表します。isUnderSideパラメータは、Cの断面積(バックはそのページをめくるれる)の計算は、最後のパラメータのタイプが左折ページまたは右ページであるか否かをプログラムに通知するために使用されます。上述したように、実質的に、isUnderSideおよびタイプパラメータは、パスのパターン精度を得るために使用される現在の角度を表すパラメータです。送信パラメータが参照され、次にCを描画する前に座標を回転させる(図4及び図5を参照)。 コードを使用して コントロールをインストール 簡略化のために、このコントロールは、独自の絵を持っています。LoadSamples()メソッド内の初期化コード画像。このメソッドはコンストラクタ・メソッドのサンプル・クラスで呼び出されます。 速度とページの数を制御 旋回速度タイマーによって制御され、それは(ミリ秒)の速度を旋回TickSpeedパブリックプロパティを制御するために使用することができ、アニメーションフレームに各タイマ間隔がホットスポットを移動する距離でありますコントロール。外の世界への露出を制御するpublic属性は、距離xを移動しました。 高さ調整 バック・ページの上部に沿ってカットしても問題あり、公共の財産HeightAdjustmentは、コントロールの最上部に簡単に切断するためのいくつかの空白領域を残します。 アニメーションが開始され 、このコンポーネントは、アニメーションを開始するために2つのメソッドを公開します。 animateRightPageTurn()とanimateLeftPageTurnは() 。 注 IパズルしようとしていたときにH = Hが=非線形方程式ときX-PAGE_HEIGHT タン(45 +((45 *(X-))/このコードの私のブルートフォース手法のx PAGE_WIDTH))の値は、ソースコードに含まれています。それを行うにはよりエレガントな方法はありませんか? 説明:HTTPへのプログラムのソースコード:// download.csdn.net/source/381727ダウンロード。 ネットワークプログラミングのエントリからのこの記事:HTTP:// www.bianceng.cn/Programming/csharp/201001/14287_5.htm
C#とGDI +とフリップアニメーション雑誌の詳細を達成するために
説明:私は、電子雑誌、以前のプロジェクトに携わっています、他の人が、記事をお勧めします実生活雑誌フリップアニメーション効果のシミュレーションを達成し、最終的に私が望む効果を達成するために必要であった、今日は、少し記事を翻訳しようとします。英語能力を助けたいと思うことは良い仲間ではありません。:HTTP:あなたの英語力が十分であれば、私はあなたがでオリジナルの英語サイトを読むことをお勧めします// www.codeproject.com/KB/GDI-plus/TurnThePage.ASPx、そしてあなたは私の翻訳レベルを許すことを願っています。 はじめに 、図1のフリップ効果は、 この記事では、電子書籍や電子アルバム、この本ページはフリップ効果を模倣状況の現実に側で画像表示面の作成時に効果を反転する方法について説明します。 背景 需要の画像を表示するために使用される再利用可能なコンポーネントから、この記事を書くことでインスピレーション。私はC#とGDIを使用 +を.NETプログラミングのグラフィックイメージの私の理解を向上させることができます。 :この効果を作成する技術的背景がで記事「FalshMXフリップ効果、」から来ている:HTTP // 、www.oreillynet.com/pub/a/JavaScript/2004/09/03/flashhacks.html著者はシャムBhangalです。ページの可視部分を制御するために記事にアニメーションの対称線を使用する方法偽。対称線がページを用いて算出されたプロセスが、やや異なるのFlash MXでGDI +で、このコンセプトの目に見える部分は同じです。 この記事では、3ページと4ページが現在のページで、次のアクションが5ページと6ページを回すためにあることを前提としています。言い換えれば、我々は、4ページのフリップ効果で示したいと思います。 アニメーションの技術 次の図は、アニメーションの全領域における重要分野と変化を示しています。 図2及び図クリティカル領域パラメータ :全体のページめくりアニメーションのように要約することができる 1 完全ページ3およびP 4を集め、。描画が完了した後、B及びCは、部分的に元の可視部分の4ページの不明瞭されるであろう。 図2に示すように、対称線を計算して、作物の領域B及びCれます。 3 、描画セクションB. これは部分領域(6ページ)を下回っています。 4 、対応する変換ホットスポット、それに応じて回転に応じ。 5 、描画パートC. これは、その裏面(ページ5)中にページめくり4に表示されるコンテンツページです。 現在のページは、 「フリップ効果をFalshMX、」記事は、現在のページフリップ効果に関与していないと指摘しました。これは、それぞれの側(3ページと4ページ)は、第1の任意の切断なしに行われるとコンバージョンページが上に描かれることを意味します。B及びCは、このページ上に描画するための2つの可視部分であろう。 ホット 「ホット」私はオーバーの記事で「FalshMXフリップ効果」から借りた言葉です。ページの横軸上の代表的な折り目用語ホットスポットの位置、対称線の開始位置を示します。転換の過程で、それがブックこの距離からのページの真ん中に熱い縁部との間に移動されました。ホットスポット(X)からこのページにページフリップ側から変化します。ホットスポットは、X、アニメーションが停止し、本の中間位置に到達したとき = PAGE_WIDTH。 対称線の 折り目線は、対称ページめくりを表します。ページの可視部分に参加するページを計算するために使用されます。プロセスでは、二つの対称の制御ラインは: 1 、B、及びCの部分は領域をトリミング。 2 、パートCは、座標変換の原点です。 対称の線は、次の2つの式によって記述することができる: A = 45 +((45 * X)/ PAGE_WIDTH) H = Xタン(a)の 角度は、xの変化に伴って変化することに注意してください。この式は、X示し = 0 = 45°とPAGE_WIDTHは= A = X 90度。 アニメーションが開始されると、X = 0 、B及びCの部分はそう見えません。Xが増加するにつれて、対称線は、斜辺を形成します。対称、X及び高さhのライン:三角形は3つの長さによって決定されます。図2は、このような状況を示しています。 xの増加に伴い、H表示されます > = PAGE_WIDTHの例を。これが発生すると、対称交差する三角形のラインでページ領域が台形になります。台形の高さはPAGE_WIDTHです。図1の場合です。 三角形または台形のいずれかで、このルートはB及びCは、2つの切断領域を示し閉じられます。鋸フレームと、この操作の効果を確認するには、このパラメータINCLUDE_DRAW_GRAPHICS_PATHに提供されたソースコードは、ライン上でtrueに設定されています。プログラムは、黄金分布の閉じたパスの外に描画されます。 部分領域 このセクションでは、部分BおよびCの後に目に見える部分(4ページ)に回転ページを低減することです パートB領域 他のページのパートBは、この例では中央部が6ページに表示され、ページの下に反転されます。パートBは、カット部分の閉曲線ページから形成されている対称線を有する領域です。このセクションの上にページ(4ページ)の対応する部分を直接切断します。明らかに、(増加にも)は、xの増加に伴って、目に見える部分が増加します。 領域部分AとBとの間の関係を見るために、設定INCLUDE_UNDERSIDE_PAGE_IN_ANIMATION変数が偽に設定されています。これは、アニメーション部Cから削除されます。 C領域の部分 画像領域Cは、反転されるバックページの画像部分を表します。この場合、Cは、5ページの可視部分の一部の領域を表します。パートCは、対称線で指定されたが、それはページ(対称線の左側)のこの側にあるされています。4ページをめくる場合、例えば、パートBは、ページ6の右下部分になり、部分Cは、5ページの左下の部分であろう。図3は、BとCとの関係を示す図 図関係。3 B及びC 描画部Cの領域では、我々は、背景画像を支援するために使用される、pageUndersideImageあります。画像領域のこの減少は、対称の新しいラインによって決定されます。5ページの画像が内部新しいバッファに描画され、この新しい画像は、描画の領域Bの部分に近くなります。 B及びCは、一部の領域に接続されている 背景画像部分Cの準備ができ、以下の工程により描画される: まず、フォーカスを調整する座標系。 システム180回転座標 - 図2A度、図4の関係を理解参照。 パートCは、それぞれの座標(画像に描画領域を含ん - -X-、PAGE_HEIGHT)。図5は、このような回転を示します。 図4は、対称線の角度と一致するように調整します 図5回転座標系 Iは、部分領域B、及びCがあるため、「血液側」に感受性の現在のページの色の対称の線に沿って非常に困難で配置されていることを見出した(理由4ページ上の赤色画素の一部)。私は部分領域B又はCを描くときに、私が回避策を使用する:pixeloffsetmodeはpixeloffsetmode.half的に描かれたグラフィックオブジェクトを指定しました。 g.PixelOffsetMode = PixelOffsetMode.Half; Iはまた、発見したその部分領域C(またはマイナス1つのピクセル)座標回転を防止することができるピクセルを増加させる、描画に先立ち「血液側」。 PathTranslationMatrix.Translate((フロート)+ hotSpot.Origin.X 1。 、 ( フロート)hotSpot.Origin.Y)は、 この問題を回避する、trueに設定されたソースコードUSE_PIXEL_MODE_OFFSETをpixeloffsetmodeします。 アニメーション アニメーションの各フレームは、オブジェクトバッファCurrentShownBitmap timer1_Tickプロセスに描かれています。CurrentShownBitmap方法は、画面上に描画することだけです。 機能を中心に説明 :以下の方法により行われ、画像BおよびパートCアニメーションの各フレームで演算を プライベート GraphicsPath GetPageUnderGraphicsPath(INTX、 refdouble A、int型の高さ、int型の幅、 BOOL isUnderSide、TurnTypeタイプ) パラメータxは、表示される現在のページの高さと幅(前述)、高さと幅のパラメータを代表するホットスポットでページの端からの距離を表します。isUnderSideパラメータは、Cの断面積(バックはそのページをめくるれる)の計算は、最後のパラメータのタイプが左折ページまたは右ページであるか否かをプログラムに通知するために使用されます。上述したように、実質的に、isUnderSideおよびタイプパラメータは、パスのパターン精度を得るために使用される現在の角度を表すパラメータです。送信パラメータが参照され、次にCを描画する前に座標を回転させる(図4及び図5を参照)。 コードを使用して コントロールをインストール 簡略化のために、このコントロールは、独自の絵を持っています。LoadSamples()メソッド内の初期化コード画像。このメソッドはコンストラクタ・メソッドのサンプル・クラスで呼び出されます。 速度とページの数を制御 旋回速度タイマーによって制御され、それは(ミリ秒)の速度を旋回TickSpeedパブリックプロパティを制御するために使用することができ、アニメーションフレームに各タイマ間隔がホットスポットを移動する距離でありますコントロール。外の世界への露出を制御するpublic属性は、距離xを移動しました。 高さ調整 バック・ページの上部に沿ってカットしても問題あり、公共の財産HeightAdjustmentは、コントロールの最上部に簡単に切断するためのいくつかの空白領域を残します。 開始アニメーション 、このコンポーネントは、アニメーションを開始するために2つのメソッドを公開します。 animateRightPageTurn()とanimateLeftPageTurnは()。 注意 私はHパズルしようとしていた = H非線形方程式x =タンPAGE_HEIGHT(45 +((45 *(X))/ このコードの私のブルートフォース手法におけるxの値がに含まれているPAGE_WIDTH))をソースコード。それを行うにはよりエレガントな方法はありませんか? 説明:HTTPへのプログラムのソースコード:// download.csdn.net/source/381727ダウンロード。