質問

C ++でスクリーンセーバーを作成して、画面上のランダムな場所で画像をフェードアウトし、フェードアウトで指定された時間遅延を設定するにはどうすればよいですか?

マルチモニターのサポートは素晴らしいでしょう。

機能するコードがある場合、またはどこで入手できるかがわかっている場合、それは素晴らしいことです。そうでなければ、正しい方向に私を向けます。私は、滑らかで遅れのないogのちらつきのないフェードを持つ方法を探しています。スクリーンセーバーはWindows XP用です。

C ++は知りませんが、AS3、Javascript、およびPHPは知っています。そのため、その知識の一部をC ++に関連付けたいと考えていました。

コンパイルには何を使用すればよいですか

役に立ちましたか?

解決

最初にC ++で始める場合は、Visual C ++のようなWindows固有のコンパイラーで始めないでください。 eclipseや code :: blocks などのコンパイラーが付属する、優れたクロスプラットフォームIDEを入手してください。他のプロジェクトと同様に、段階的に完了できる小さなタスクに分割する必要があります。いくつかのハードルがあるようですね。

  1. C ++の知識の欠如(私たちはかつてここにいました)
  2. 画像に関する知識の欠如(非常に一般的な苦痛)
  3. 経験不足(これについては作業します)

他人に落胆させないでください。あなたはこれを行うことができ、おそらくあなたが考えているよりも速くなります。 C ++についての本を1つか2つ読んでください。多くのことを知らなくても1つのプロジェクトでうまくいくことができますが、しばしばイライラするでしょう。プロジェクトを小さな目標のセットに分割しましょう。各目標を完了すると、C ++に対する自信が高まります。

  1. 画像のブレンド
  2. マルチスクリーンサポート付きのWindowsスクリーンセーバー
  3. スクリーンキャンバス(directx、opengl、bitmaps?)
  4. タイマー

最初に、画像の混合の問題を見てみましょう。私はあなたが「フェード」したいと思うと思います;アクティブなウィンドウの背景に問題の画像を追加します。単色の背景を使用する場合は、キャンバスの更新の間に問題の画像のアルファ透明度を変更することでそれを実行できます。基本的に、リフレッシュタイマーに基づいて2つの画像の各ピクセルのカラー値を平均する必要があります。より直接的に言えば、結果のピクセル(P3)の赤、緑、青のピクセル要素を見つける

N =間隔ごとのタイマーティック(秒/ミリ秒/など)
T =この間隔が発生したティック
P1r =画像1の赤いピクセル要素
P2r =画像2の赤いピクセル要素
P3r =合成画像の結果の赤ピクセル要素
P1g =画像1の緑のピクセル要素
P2g =画像2の緑のピクセル要素
P3g =ブレンドされた画像の結果の緑のピクセル要素
P1b =画像1の青いピクセル要素
P2b =画像2の青いピクセル要素
P3b =ブレンド画像の結果の青いピクセル要素

P3r = ((T/N * P1r) + ((N-T)/N * P2r))/2
P3g = ((T/N * P1g) + ((N-T)/N * P2g))/2
P3b = ((T/N * P1b) + ((N-T)/N * P2b))/2

では、Windowsのスクリーンセーバーとマルチモニターサポートの問題を見てみましょう。これらは、実際には2つの別個の問題です。 Windowsスクリーンセーバーは、実際には、特定のコールバック機能を持つ通常の.exeコンパイル済みファイルのみです。スクリーンセーバー機能の設定に関する多くのチュートリアルをネット上で見つけることができます。スクリーンキャンバスを設定するときは、実際にマルチモニターのサポートが問題になります。これについては次に説明します。

スクリーンキャンバスを指すときは、プログラムが視覚データを出力する領域を指します。すべての画像レンダリングアプリまたはチュートリアルは、基本的にこの同じ概念を参照します。これが特に興味深いと思う場合は、コンピュータービジョンの大学院プログラムまたは学習コースを検討してください。後悔しないでください。とにかく、アプリの基本的な性質を考慮すると、openGLまたはDirectXを使用することはお勧めしません。それぞれが独自のアプリ固有の知識の層を持っているからです。一方、ダブルバッファリングやGPUオフロードなどの組み込みの3D機能が必要な場合は、openGL(プラットフォームに依存しない)を使用します。たくさんの楽しい画像ライブラリもギミックとして提供されています。

マルチモニターのサポートに関しては、これは扱いにくいですが複雑な問題ではありません。基本的には、キャンバスの境界(画面の境界)を設定して、複数のモニターのジオメトリに一致させるだけです。同じ解像度の複数のモニターで問題になるべきではなく、モニターの解像度が一致しないとトリッキーになる場合があります(画面にキャンバス領域が表示されないなどがあります。これらの問題のアルゴリズムと回避策はよく知られていますこの質問の。

最後に

他のヒント

  

" C ++は知りませんが、AS3、Javascript、およびPHPは知っています。そのため、その知識の一部をC ++に関連付けたいと考えていました。

ああ、あなたは驚かれるでしょう。 C ++を学習するには:

  • 1つか2つの非常に優れた本を購入します(こちらを参照)。あまり良くない本を買わないでください。彼らは、あなたがさらなる進歩を遂げるために後で学ばなければならない習慣をあなたに教えます。
  • 多くの実践的なコード記述を行う必要があります。最初の数週間で、コンパイラーは不可解なエラーメッセージを大量に吐き出し、コードはクラッシュし続け、コードを見ているベテランのC ++プログラマーは嫌悪感を覚えます。そして、それはあなたのせいです常に
  • 学ぶために多くの時間を計画します。そして、私は本当にたくさんを意味します。どれだけの時間を費やしても、「ダミー」からアップグレードするまで少なくとも数か月かかります。 「初心者」に。
  • 本物のプロフェッショナルになり、本や記事を常に読み、ニュースグループやディスカッションフォーラムに多くの時間を費やし、他の人から学び、周囲のあらゆる壁に頭をぶつけるために、数年間それを叩かなければならないことを想像してください机。
  • C ++で生計を立てて10年間プログラミングを行った後でも、少なくとも毎週1回は知らないことを学ぶ準備をしてください。
  • 少しの間、これを誇張しないでください。

説明のために編集:ハンターデイビスとエレメンタルの両方の答えをアップ投票しました。そこに私の暴言。実際、多くの人が実際にC ++のことをあまり知らなくても、スケルトンの例を挙げれば、C / C ++で何かを一緒にハッキングできることを疑いません。さあ、試してみてください。妥当な時間内にスクリーンセーバーを思い付く可能性があります。しかし。 「C / C ++で何かを一緒にハック」できること「C ++を学んだ」とは程遠い。 (そして、非常に遠いことを意味します。)

C ++は、信じられないほど複雑で、平均的で、頑固な獣です。息をのむほど美しいと思いますが、おそらく非常に高い山からの景色を反映しているため、美しさを十分に理解できるところまで到達するのはかなり困難です。

C ++は複雑な言語であり、sbiが示すことはおそらく真実です(10年の商用C ++プログラミングの後でも、まだ学ぶべきことがいくつかあります)。日まで: a)ここに記載されているコンパイラのいずれかをインストールします(WindowsプログラミングのクイックインとしてVCをお勧めします) b)Windows GDIを使用して簡単なことを行うスクリーンセーバーのサンプルコードを見つけます(スクリーンセーバーに関するMSドキュメント内にいくつかのコードがあります)。 c)このコードを変更して、必要な処理を実行します。

制限された要件に関しては、ウィンドウGDI ++ライブラリには、必要なアルファフェードをスムーズに実行するのに十分なパワーがあることがわかります。

Microsoft C ++ Expressをご覧ください。それは無料で、かなりの能力があります。管理されていない実行可能ファイルを作成するには、ハッキングするか、古いバージョンを入手する必要がある場合があります。

チュートリアル残りで利用可能

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top