
一般のソフトで画像を扱う場合、解像度が2のべき乗だと効率がいい?
ゲームの開発などで画像を扱う場合、解像度が 256×256pixel とか 512×512pixel というように、2のべき乗にすることになっています。
その方がメモリの効率がいいからだと聞いています。
では、一般のパソコンソフトでも同じことが言えるのでしょうか?
Office や Photoshop や 3DCGのソフトで画像を読み込む場合でも、解像度を2のべき乗にした方がメモリの効率がいいのでしょうか?
No.1ベストアンサー
- 回答日時:
例えば、 3Dゲームで画像を使うものに、マッピングがありますが。
表示内容に合せて拡大縮小する際には、乗除算が多く使われます。
例) 表示画像幅 w の 座標x (0≦x≦w)に対応する 幅Wの元画像の座標Xは
X= ( x / w ) * W
= W * x / w
逆に, Xに対する xは
x = w * X / W
一般的に、乗除算は、加減算に比べて時間のかかる演算です。
しかし、2の整数べき乗の乗除算に限れば、計算を早くできます。
演算が整数なら、 べき乗数の分ビットシフトするだけです。
演算が浮動小数点なら、コンピュータの内部表現は 仮数 * 2^n なので、このnを加減算するだけです。
計算量の多い3Dグラフィックでは、こういう小さな積み重ねが大きく影響します。
また、最近の32bitや64bit等のCPUでは、データはまとめて4バイト8バイト単位でアクセスするようになっているのが多いです。
そのため、中途半端なアドレスからアクセスするのは効率が悪いです。
Windowsのbitmap形式等、このような制限を回避するために、水平方向のデータは4の倍数になるように、ダミーのデータを入れています。
これが、(4以上の)2のべき乗幅なら、絶対4の倍数になるので、ダミーの必要がありません。
あとは、高速フーリエ変換は2のべき乗に限定した高速化手法です。
これが、一般のソフト、となると、なんとも言えません。
内部でどんな風にあつかってるかわからないからです。
また、「効率」にも速度的なものと空間的なものがあって、排他的な傾向のものが少なくありません(高速なのは容量を使う,省容量では速度が遅くなる)
また、元のべき乗でない画像を、べき乗解像度に変換するには、拡大か縮小が必要ですが、拡大すればその分必要な容量が増えますし、縮小すれば画質が落ちます。
例えば、 320x320を512x512にすれば、画素数は約2.6倍です。いくらべき乗サイズが効率が良いとしても、2.6倍の容量と相殺以上の効果があるとは思えません。
これらのうち、3DCGソフトについては、マップ用にはべき乗サイズしか受け付けない、とか、自動で変換するとかしているかもしれません。
コンピューターのソフトすべてに共通した法則かと思っていたのですが
効率がいいといっても、ソフトによっていろいろな方法があるんですね。
特に2のべき乗を推奨しているわけではないソフトなら、2のべき乗に
したところで効率がいいとは限らないので、それにはこだわらないことにします。
詳しくご説明頂いてありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
シーケンス制御についての質問...
-
スロースキャンコンピュータ 加...
-
ギルバートモデルの、ビット誤...
-
この画像の命令「CMP k300 D0 M...
-
0xffffとは?
-
Javaの問題について
-
8ビットのデータの、先頭ビット...
-
ビット演算について
-
C言語やC++言語でビット毎に値...
-
A4 持ち込み
-
プログラム言語
-
文系のSE志望です。プログラミ...
-
コンピューターの原理を根本か...
-
レジストってなんですか?
-
シーケンサのデータレジスタD...
-
昔のゲーム製作に使用する言語...
-
アセンブラのリンカのダウンロ...
-
Z80、6502、i8086、MC68000につ...
-
ATtiny2313のヒューズビットOSCCAL
-
MPLAB IDE v8.92アセンブラにつ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
0xffffとは?
-
8ビットのデータの、先頭ビット...
-
一般のソフトで画像を扱う場合...
-
エクセルVBAのIf,Then 構...
-
ビットシフトってどんな時使うの?
-
シーケンス制御についての質問...
-
C言語で128bitの2進数のビット...
-
03分22秒36のような時間の単位...
-
文字参照は10進数と16進数では...
-
16ビットCPUで32ビットの計算方法
-
C言語やC++言語でビット毎に値...
-
C言語「K&R」の演習2-9について
-
2の補数
-
verilog 符号付加減算(最上位...
-
ULONGLONGよりも大きい整数を扱う
-
二元対称無記憶通信路を実現す...
-
情報科学の飽和演算、ラップア...
-
命令について
-
オーバーフローについて教えて...
-
マイクロコンピューター制御の...
おすすめ情報