2010-12-05 5 views
1

ビットマップを扱うコードを書く必要があります。私を始めさせる主題についての良い紹介はありますか?ビットマップの良い紹介はどこにありますか

+1

この質問はプログラミングと関係がありますか? –

+1

あなたは本当にあなたの質問を明確にすべきです。何を知りたいですか?圧縮?ファイル形式? – ThiefMaster

+0

そうだと思います。私の答えは、最初にビットマップを操作するプログラムを書くときに学ばなければならなかったすべての基本事項です。私は、ほとんどのゲームプログラマーは同意すると思います。 –

答えて

4

元はWhat every developer should know about bitmapsに投稿されています。

ほとんどすべての開発者はプログラミング時にビットマップを使用します。または、プログラミングではなく、ウェブサイト、ブログ、または家族の写真で。しかし、私たちの多くは、GIF、JPEG、またはPNGファイルの間のトレードオフを知りません。そこには大きな違いがいくつかあります。これは、ほとんどの場合十分な基礎に関する短い投稿であり、残りの部分については良いスタートです。これのほとんどは、ゲーム開発者(inc。Enemy Nations)として学びました。ここでは、グラフィックスを深く理解する必要があります。

ビットマップは基本的に各ピクセルの色を格納します。しかし、これには3つの重要な要素があります。

  1. 色値自体を保存しています。ほとんどの は、RGBに慣れています。 は、赤、緑、&青色の各色のコンポーネントを格納しています。これは 実際には最も効果的ではない方法 人間の目として微妙に見ることができる 色のスペクトルのいくつかの部分の違い。 などの色で多くの共通操作を明るくすることは、非効率的です。しかし、最も一般的な プログラミングタスクのための最も簡単な ですので、標準 になっています。
  2. 各ピクセルの透明度。これは、非長方形画像のエッジである の場合には重要です。 対角線は、 の色と の色と の基本ピクセルの色の組み合わせになります。各ピクセルは、 (実際には不透明度)の透明度を0% (基本ピクセルを表示)から100% ( イメージのピクセルのみを表示)に設定するには、 が必要です。
  3. ビットマップメタデータ。この は の画像は の画像のカラーテーブルと の解像度の範囲の画像です。

圧縮

ビットマップは、大量のデータを取ります。あるいは、より正確に言えば、それらは多くのバイトを取ることができます。圧縮は長年にわたって新しいビットマップフォーマットの主要な要因となっています。圧縮は3つの味、パレットの減少、損失のある&可逆で来ます。

初期のパレット削減は最も一般的なアプローチでした。一部のプログラムでは、黒色のビットマップが使用されていました(&)ので、1ピクセルあたり1ビットです。今、それはそれを圧迫しています。そして、Windows 3.1の時代には、16色の画像(4ビット/ピクセル)が依然として広く使われていました。しかし、主な用途は、ビットマップの場合は8ビット/ 256色の場合でした。これらの256色は、ビットマップの一部であるパレットにマップされ、そのパレットは各エントリに対して24ビットの色を保持します。これにより、プログラムは、画像を最もよく表示する全スペクトルのうち256色を選択することができます。

このアプローチは非常に優れており、表面全体で非常に遅い遷移を持つ平坦な面ではほとんど失敗しました。また、ビデオカードは画面全体に1つのパレットを持つ8ビットシステムであったため、Webおよびウィンドウズのオペレーティングシステムでは大きな問題となりました。画面全体を所有していたゲームでは問題ありませんでしたが、異なるソースからの画像が画面を共有していた場合はそうではありませんでした。これに対する解決策は、標準的なWebパレットが作成され、パレットの競合があった場合、ほとんどのブラウザなどがそのパレットを使用していました。

最後に、16ビット/ピクセルのようないくつかの中間的な解決策がスペクトル全体を提供しましたが、人間の目が陰影の変化でジャンプを見る粗いレベルの細かさがありました。これは、メモリ価格が下がり、ビデオカードが1年で8ビットから24ビットに急速に急増したため、ほとんど役に立たなかった。

次はロッシー圧縮です。圧縮は、ファイル内で繰り返されるパターンを見つけることであり、2番目のケースでは最初の実行を指すだけです。 2回目の実行で唯一の違いがある場合、2つのピクセルが1の値で赤くなり、20ピクセルのランがある場合はどうなりますか?人間の目はその違いを見ることはできません。だから、セカンド・ランを最初のバラと一致するように変更して、それを圧縮することができます。ほとんどの損失圧縮方式では、損失のレベルを設定できます。

このアプローチでは、単一の色を使用して透明度を指定すると、重大な問題が1つあります。その色が1ビットだけシフトされた場合、それはもはや透明ではない。これは、損失のあるフォーマットがほぼ独占的に写真に使用され、ゲームでは決して使われなかった理由です。

最後にロスレスとなります。これは、プログラムが情報を失うことなく画像から鼻を圧迫する場所です。私は、画像を圧縮することがそれらを伸張するよりも実質的に多くの時間を要するという点を除いて、どのように/どのようなことをするのかを知ることはしません。圧縮された画像を高速で表示します。あまりにも速くはない画像を圧縮する。これはパフォーマンス上の理由から、ロスレスなフォーマットで即座に保存したくない状況につながります。

透明

透明度は3種類があります。 (Webコンテンツを作成するアーティストが知っている場合は、このセクションを読むようにしてください。この問題については無関心です)最初の味はnoneです。ビットマップは長方形であり、その下のすべてのピクセルを覆い隠します。

2番目のビットマップは、指定された色の値(ほとんどの場合、マゼンタを使用しますが、どの色でも使用できます)は透明です。そのため、他の色が描画され、マゼンタのピクセルは描画されず、下にあるピクセルが表示されます。これは、選択された背景色で画像をレンダリングすることを必要とし、部分的に画像であり部分的に背景画素であるべきエッジ画素は部分的に背景色である。実際には、白い背景に完全なエッジがあり、黒い背景にエッジに奇妙な白いハロー効果がある256色のアイコンが表示されます。

第3のフレーバは、各ピクセルについて8ビットの透明度(すなわち、0~100%の256値)である。これは、32ビットのビットマップが意味するもので、24ビットの色と8ビットの透明度です。これは、人間の目が識別できるよりも細かい目盛を有する画像を提供する。アーティストと話すときに警告の1つの単語 - 彼らはすべて "32ビットのビットマップを生成することができます。しかし、それらの95%は、すべてのピクセルが100%不透明に設定され、プロセス全体と透明性の必要性については無知です。これを行う方法の良い例として、アイコンエクスペリエンスを見てみましょう。私たちのビットマップは優れていると思います(私たちはAutoTagでそれらを使用しています)。

解決

多くのフォーマットは、解像度、通常DPI(ドットパーインチ)として記載しています。写真を見るとき、これは一般に問題ではありません。しかし、ビットマップとしてレンダリングされたチャートの例を考えてみましょう。グラフのテキストを読みやすくするには、600 DPIプリンタできれいに印刷することが必要ですが、画面上に600ドットを1インチにしてわずか96ピクセルで表示する必要があります。解決策はこの能力を提供します。 DPIは一部の形式では存在せず、他の形式ではオプションです(任意の形式では必須ではありませんが、PNGでは欠落していることは珍しいです)。

DPIの重要な点は、ビットマップをレンダリングするときに、プリンタの解像度で印刷したり、解像度を下げて表示したりすることが必要な場合があることです。 DPIを設定するプログラム。 96 DPIでレンダリングするので、モニタ上での標準的な表示を除いては役に立たない非常に強力なチャート作成プログラムがあります。あなたの使用を制限しないでください。

ファイル形式

オクラホマので、あなたはどのようなファイル形式を使用する必要がありますか?最善のものから最も有用性の低いものへ。

PNG - 32ビット(またはそれ以下)の可逆圧縮、小さなファイルサイズ - 好きではないもの。一部のブラウザ(Internet Explorerなど)の古いバージョンでは、透明なピクセルがオフホワイトの色で表示されますが、新しいバージョンでは正しく処理されます。これを(32ビットモードで8ビットを使用して透明にする)すべてに使用します。

ICO - デスクトップ上のアプリケーションなどを表すために使用されるアイコンファイルです。これは、解像度とビット深度がそれぞれ異なるビットマップのコレクションです。これらのためには、16x16から256x256までの32ビットpngファイルを使用して構築します。 O/Sやアプリケーションのビット深度が必要ない場合は、その場で減らし、8ビットの透過性を保ちます。

JPEG - 24ビットのみ(透過性なし)、損失があり、小さなファイルサイズ。あなたが古いブラウザを使用している人の数が多い場合を除き、このフォーマットを使用する理由はありません。これは悪いフォーマットではありませんが、PNGに劣り、利点はありません。

GIF - 8ビット、ロッシー、非常に小さいファイルサイズ。 GIFには2つのユニークな機能があります。まず、1つのファイルに複数のGIFビットマップを配置し、それぞれの間に遅延を設定します。アニメーションビットマップを与えるものを再生します。これは、すべてのブラウザで0.9バージョンに戻って動作し、フラッシュファイルよりも小さいファイルサイズです。反対側ではわずか8ビットで、今日の世界では貧弱に見える傾向があります(ただし、一部のアーティストはわずか8ビットですばらしいことができます)。また、色は透明に設定されているため、(オン/オフの種類の)透過性をネイティブにサポートしています。これは、Flashのオーバーヘッドや帯域幅が大きな問題ではないアニメートされたビットマップが必要な場合に便利です。

BMP(DIBとも呼ばれます) - 1〜32ビットのロスレスで大きなファイルサイズ。これを使用するケースが1つあります。速度が最重要課題の場合です。多くの2-Dゲームプログラム、特に今日利用可能なグラフィックスカードの前に、BMP/DIBとしてすべてのビットマップを保存するので、ゲームの60フレーム/秒を表示しようとすると、時間の節約が重要です。

TIFF - ビット深度、任意の圧縮(ロッシーまたはロスレス)、キッチンシンクを含むすべてのもの - PNGより優れているものではありません。基本的に、政府と一部の大企業は、将来のソフトウェアがこれらの古いファイルを読み込めるように、「標準」が必要だと判断しました。 PNGが法案に適合しているので、この全体の議論は意味をなさない。しかし、一部の顧客(連邦政府のような)にとっては、PNGではなくTIFFです。お客様がPNGを要求した場合(ただしPNGを使用している場合)に使用します。

その他すべて - 廃止されました。 (注:多くの人が私の意見に同意していないが、他のフォーマットのサイズは小さくなっているが、メモリは&に近い)。ビットマップエディタを作成する場合は、すべてのフォーマットの読み書きをサポートする。しかし、他の用途では、上記の2 + 4フォーマットに従ってください。

0

あなたが使用するファイル形式やアルゴリズムについて何かを知りたい場合は、havealookatこれらのリンク。

関連する問題