基本情報のビットマップの計算は、横の画素数×縦の画素数×1画素のビット数で、非圧縮の画素データ量を求めるのが基本です。結果はビットなので、バイトで答えるときは8で割ります。
ただし、色数をそのまま掛けたり、24ビットカラーにさらにRGBの3を掛けたりすると答えが変わってしまいます。また、画素だけのデータ量と、ヘッダーなどを含む実際のBMPファイルサイズも分けて考える必要があります。
この記事では、計算条件の読み方から、色数とbppの関係、縦横の倍率、データ量からの逆算まで、オリジナルの6問で確かめます。式の数字が何を表すかを押さえれば、条件が変わっても同じ手順で解けます。
- 画素数と1画素のビット数を分けて式を立てる
- 色数を2の累乗に直して必要なビット数を求める
- ビットとバイト、KBとKiBを条件どおりに換算する
- 拡大率と逆算を使って答えの大きさを検算する
基本情報のビットマップを画素数・色数・単位から理解する

ビットマップは画素ごとの情報で画像を表す
ビットマップは、画像を小さな画素、つまりピクセルの集まりとして表す方法です。長方形の画像なら、画素を縦横の格子に並べ、それぞれに色や明るさの情報を持たせます。一つの画素に何ビット使うかが決まれば、画素全体のデータ量を計算できます。
Microsoftのビットマップの説明でも、画素の集まりと、各画素へ割り当てるビット数を分けて説明しています。たとえば1画素4ビットで色の番号を表すなら、その番号は16通りです。
「ビットマップ」は画素で表す考え方を指す場合があり、「BMP」はファイル形式の名前です。ビットマップの問題だから必ずBMPファイルの細部まで計算するとは限りません。問題が画素部分だけを問うのか、保存ファイル全体を問うのかを最初に確認しましょう。
IPAの基本情報技術者試験シラバスVer.9.2では、静止画処理の用語例にラスターデータ(ビットマップデータ)やBMPなどが挙がっています。まずは画像1枚の画素データ量を、条件から計算できるようにしましょう。
縦×横で総画素数を求める

横400画素、縦300画素の画像なら、総画素数は400×300=120,000画素です。400+300ではありません。横一列に400画素あり、それが300行あるので掛け算になります。縦と横のどちらを先に掛けても、総画素数は同じです。
問題文が「400×300ピクセル」と書いていれば二つの辺が分かりますが、「12万画素」と書いていれば、すでに総画素数です。12万画素をもう一度二乗する必要はありません。一つの辺の画素数なのか、画像全体の画素数なのかを分けて読みましょう。
物理的な幅が同じでも、使う画素数が異なれば画像データ量は変わります。逆に画素数を変えず表示だけ大きくしても、元の画素データが自動的に増えるわけではありません。計算で使うのは画面上の見た目の大きさより、データとして指定された縦横の画素数です。
dpiやppiなどの密度だけでは、総画素数を一つに決められません。物理的な長さと密度の両方が与えられた場合は、長さから各辺の画素数を求める段階が必要です。ここで扱う演習では縦横の画素数を直接指定し、条件の分からない密度を追加しないことにします。
| 問題文の表し方 | 式へ入れる総画素数 | 注意点 |
|---|---|---|
| 横400×縦300画素 | 400×300=120,000 | 二つの辺を掛ける |
| 12万画素 | 120,000 | すでに総数なので二乗しない |
| 横400画素のみ | まだ決められない | 縦の画素数などが必要 |
色数は2の累乗からビット数へ直す

色の番号をbビットの固定長で表すと、番号の組合せは2のb乗通りです。1ビットなら0と1の2通り、2ビットなら00、01、10、11の4通りです。4ビットなら16通り、8ビットなら256通りになります。
したがって「最大16色から1画素の色を選ぶ」という条件なら、必要な番号は4ビットです。256色なら8ビットです。色数が16だから1画素16ビットという計算にはなりません。色数は選択肢の個数で、ビット数はその選択肢を区別するための桁数です。
MicrosoftのAbout Bitmapsにも、256色で8bpp、16色のパレット番号で4ビットという対応が示されています。bppはbits per pixelの略で、1画素あたりのビット数を表します。
20種類の色番号を固定長で区別するなら、4ビットの16通りでは足りず、5ビットの32通りが必要です。この「必要最小のビット数」は、2のb乗が色数以上になる最小の整数bを選んで求めます。ただし、実際のファイル形式が5bppで保存できるという意味ではありません。理論上の番号の表現と、保存形式の対応幅は別です。
| 色の選択肢 | 必要最小のビット数 | 理由 |
|---|---|---|
| 2色 | 1ビット | 2¹=2 |
| 4色 | 2ビット | 2²=4 |
| 16色 | 4ビット | 2⁴=16 |
| 20色 | 5ビット | 2⁴では不足し2⁵=32 |
| 256色 | 8ビット | 2⁸=256 |
RGB各8ビットと24bppは同じ条件
RGBの赤・緑・青をそれぞれ8ビットで表すなら、1画素には8+8+8=24ビットを使います。各成分は256段階なので、RGBの組合せは256×256×256=2の24乗、16,777,216通りです。ここでは24ビットすべてをRGBの値に使う条件で考えています。
「RGB各8ビット」なら3成分分を足す必要がありますが、「1画素24ビット」または「24ビットカラー」と与えられたなら、すでに合計です。そこでさらに3を掛けると1画素72ビットとして扱ってしまいます。何に対してのビット数なのかを、式の横に短く書いておくと安心です。
8bppのパレット画像では、各画素に保存するのは色番号です。色番号に対応するRGBの色は別のパレットに置けます。各画素へRGB各8ビットを毎回保存する方式とは違うので、「カラー画像だから必ず3を掛ける」とは決めないでください。
32bppも、必ずRGBだけで2の32乗色を表すとは限りません。RGB各8ビットに、透明度のアルファ8ビットを加えた場合は、保存量は32ビットですがRGBの組合せは2の24乗です。Microsoftのアルファブレンド説明は、RGBに透明度の成分が加わる例を示しています。容量のビット数とRGBの色数を同一視しないことが大切です。
| 条件 | 1画素に使うビット数 | 読み取り方 |
|---|---|---|
| RGB各8ビット | 24ビット | 3成分を合計する |
| 1画素24ビット | 24ビット | さらに3を掛けない |
| 256色の番号を8ビットで保存 | 8ビット | パレットの領域は別条件 |
| RGB各8+アルファ8ビット | 32ビット | アルファは透明度の情報 |
ビットからバイトへは8で割る

画素数×bppで求めた結果の単位はビットです。1バイトは8ビットなので、バイトに直すときは8で割ります。横400×縦300画素、24bppなら、120,000×24=2,880,000ビット、これを8で割って360,000バイトです。
24bppは24÷8=3バイト/画素なので、最初から400×300×3=360,000バイトとしても同じ答えになります。大きな整数を先に作るより、1画素の量をバイトへ直せる場合は直しておくと計算を短くできます。ただし8で割る操作を、途中と最後で二重に行わないようにしてください。
4bppは1画素あたり0.5バイトですが、これは二つの画素の4ビットを合わせて1バイトにできるという意味です。理論上、無駄なくビットを詰める条件なら総ビット数を8で割れます。1画素ごとに切り上げて1バイトとすると、必要量を大きく見積もってしまいます。
一方、ビット列全体の長さが8の倍数でない場合、実際に保存するには末尾や行ごとに詰め物が必要になることがあります。計算問題でビット単位の理論値を求めるのか、バイト単位の領域を求めるのか、行の丸め規則があるのかを分けて確認しましょう。以下の基本演習では、不要な付加情報を除き、指定の画素ビットを無駄なく保存する条件を明記します。
KB・KiBとMB・MiBは問題の指定で換算する
単位換算は、何バイトで区切るかを確認してから行います。10進のkBは1,000バイト、MBは1,000,000バイトです。2進のKiBは1,024バイト、MiBは1,048,576バイトです。NISTの2進接頭辞の説明でも、MBとMiBは分けられています。
教材や問題では「1KB=1,024バイトとして計算する」と指定されることもあります。その場合は、問題中のKBを1,024バイトの意味で計算します。表記の慣習を理由に問題文の条件を上書きせず、答えにも指定された単位を使ってください。
たとえば360,000バイトは、1,000で割れば360kB、1,024で割れば351.5625KiBです。バイト数は同じで、表し方が違います。「KBならいつも1,024」「MBならいつも1,000,000」と機械的に決めるより、式の末尾へ換算値を書いてから割ると取り違えを防げます。
概算する場合も、丸める桁は最後に決めます。画素数を先に約12万、容量を約0.4MBと何度も丸めると、選択肢が近い問題でずれが出ることがあります。途中はバイト数の整数を保ち、問題が求める精度で最終結果を示しましょう。
| 単位 | バイトへの対応 | バイトからの換算 |
|---|---|---|
| kB(10進) | 1,000バイト | ÷1,000 |
| KiB(2進) | 1,024バイト | ÷1,024 |
| MB(10進) | 1,000,000バイト | ÷1,000,000 |
| MiB(2進) | 1,048,576バイト | ÷1,048,576 |
画素データ量とBMPファイル全体を区別する

横×縦×bpp÷8で求めるのは、各画素のビットを無駄なく並べた場合の画素データ量です。実際のBMPファイルには、画像の寸法などを示すヘッダー、方式に応じたパレット、行末の詰め物などが含まれる場合があります。非圧縮だから必ずファイルサイズと同じ、とは言えません。
MicrosoftのBitmap Storageは、ファイルヘッダー、画像の情報、色テーブル、画素を対応させるデータを区別しています。ヘッダーの大きさやパレットの有無は、形式の条件を確認してから扱います。すべての問題へ同じ定数を勝手に足すのは避けましょう。
行末の詰め物も具体的な差になります。MicrosoftのBITMAPINFOHEADERの説明では、非圧縮RGBの行の最小幅を4バイト境界に丸める計算が示されています。横7画素・24bppなら1行の画素部分は21バイトですが、4バイト単位に切り上げる条件では1行24バイトになります。
縦5画素なら、画素の理論量は7×5×3=105バイトです。同じ画像の行を24バイトで保存する条件なら、行部分は24×5=120バイトです。差の15バイトは行末の詰め物で、色や画素が増えたわけではありません。ファイル全体を求めるなら、さらに指定されたヘッダーなどを加えます。
基本情報の演習で「ヘッダー等は無視」「パディングなし」とあれば、そこは計算対象にしません。逆に行境界やパレット領域が指定されていれば、その条件を反映します。ここからの6問は画素データの計算に集中できるよう、ヘッダー・パレット領域・行末の追加領域を除くものとします。
基本情報のビットマップ問題を倍率と逆算で解く

計算前に4つの条件をそろえる
画像データ量の問題では、数値を見つけた順に掛けるより、条件を四つの欄へ分けて整理すると解きやすくなります。特に「各色8ビット」と「1画素8ビット」は別条件です。縦横、1画素の量、対象の領域、答えの単位を先に決めましょう。
横と縦が与えられたら掛けます。総画素数が直接与えられたら、その値を使います。
色数から固定長の色番号を求めるのか、RGB各成分を合計するのか、bppが直接与えられているのかを確認します。
画素だけか、ファイル全体かを読みます。ヘッダー、パレット、行末の追加領域は、必要な条件があるときだけ加えます。
総画素数×bppはビットです。バイトなら8で割り、KBやMiBなら問題の換算値でさらに割ります。
単位を添えると、式の間違いも見えます。「画素×ビット/画素=ビット」と考えれば、色の数や画像の枚数をどこへ入れるかを整理できます。バイトで計算するなら「画素×バイト/画素=バイト」です。数字だけの式にしないことが、逆算でも役立ちます。
問題1で24bppの基本計算を確かめる
問題1:横512画素、縦384画素、1画素24ビットの画像があります。画素データだけを無駄なく保存するときのデータ量を、バイトとKiBで求めてください。1バイト=8ビット、1KiB=1,024バイトとします。
総画素数は512×384=196,608画素です。1画素24ビットは3バイトなので、196,608×3=589,824バイトとなります。KiBへ換算すると589,824÷1,024=576KiBです。24ビットに追加で3を掛ける必要はありません。
| 段階 | 計算 | 結果 |
|---|---|---|
| 総画素数 | 512×384 | 196,608画素 |
| 1画素の量 | 24÷8 | 3バイト/画素 |
| 画素データ量 | 196,608×3 | 589,824バイト |
| KiBへの換算 | 589,824÷1,024 | 576KiB |
ここでMBで答えるなら、10進では0.589824MB、MiBなら0.5625MiBになります。同じ画像に複数の容量があるのではなく、同じバイト数を別の単位で示しています。最初に指定された単位がKiBなら、576KiBで答えれば十分です。
選択肢に4,718,592があれば、これは512×384×24で求めたビット数です。8で割り忘れた答えとして区別できます。589,824へさらに8を掛けたり、もう一度8で割ったりしないよう、途中の単位を残しておきましょう。
問題2で16色を4ビットへ直す
問題2:横320画素、縦240画素の画像を、最大16色のパレット番号で表します。各番号には必要最小の固定長ビット数を使い、画素番号のデータだけを隙間なく保存します。パレット領域は含めないものとして、何バイト必要でしょうか。
16=2の4乗なので、1画素の色番号は4ビットです。総画素数は320×240=76,800画素。よって76,800×4=307,200ビット、307,200÷8=38,400バイトになります。16色という数を直接掛ける計算ではありません。
4ビットの画素番号を二つまとめると1バイトなので、76,800÷2=38,400バイトと考えることもできます。1画素の量が1バイト未満でも、全体を詰めて保存する条件ならこの計算で求められます。整数の画素数を扱っている点と、バイトへまとめる段階を分けてください。
同じ画素数の24bpp画像なら、76,800×3=230,400バイトです。4bppと24bppの比は1対6なので、画素番号部分も1対6になります。ただし実際のパレット画像には色の対応表が必要な場合があります。この問題はその領域を除く条件なので、色ごとのRGB領域を勝手に足しません。
問題3で縦横の倍率を両方掛ける

問題3:横256×縦256画素、8bppの画像を、横512×縦512画素、24bppの画像に変更します。画素データ量は何倍になり、変更後は何バイトになるでしょうか。各画像の画素データを無駄なく保存し、追加領域は除きます。
横の倍率は512÷256=2、縦も2、bppの倍率は24÷8=3です。データ量の倍率は2×2×3=12倍です。「画像を2倍にしたから容量も2倍」とはなりません。縦横を両方2倍にすると画素数は4倍になり、さらに1画素の量が3倍になります。
変更前は256×256×8÷8=65,536バイトです。変更後は512×512×24÷8=786,432バイト、KiBなら768KiBです。65,536×12=786,432と、倍率の式でも確認できます。二つの方法が同じ値になれば、条件の取り違えを見つけやすくなります。
| 変更する条件 | 倍率 | 画素データ量への反映 |
|---|---|---|
| 横の画素数 | 2倍 | 2を掛ける |
| 縦の画素数 | 2倍 | さらに2を掛ける |
| 1画素のビット数 | 3倍 | さらに3を掛ける |
| 合計 | 2×2×3 | 12倍 |
縦横をそれぞれ半分にしてbppを変えないなら、倍率は1/2×1/2=1/4です。逆に横だけ2倍、縦を半分にした場合は、総画素数の倍率が2×1/2=1となります。画像の形が変わっても、画素数とbppが同じなら画素部分の量は同じです。
この関係は画素データ量についてのものです。保存形式の追加領域が固定長だったり、行末の丸めがあったりすると、ファイル全体が同じ倍率になるとは限りません。比較する二つの量が、どちらも画素部分なのかをそろえてから倍率を使ってください。
問題4でデータ量から縦の画素数を逆算する

問題4:横360画素、1画素16ビットの画像があり、画素データ量は172,800バイトです。追加領域を含めず無駄なく保存したとき、縦の画素数はいくつでしょうか。
1画素16ビットは2バイトです。横一列の量は360×2=720バイトになるので、縦の行数は172,800÷720=240画素です。「総量÷1行の量=行数」と読むと、逆算の式が作りやすくなります。
式を直接変形するなら、横×縦×bpp÷8=データ量から、縦=データ量×8÷横÷bppです。172,800×8÷360÷16でも240になります。データ量がバイトなら、ビットへ戻すための8を掛け忘れないことがポイントです。
求めた240を元の式へ入れ、360×240×16÷8=172,800となるかを確認しましょう。逆算した値が画素数なので整数になる点も確認材料です。整数にならない場合は、単位や条件を読み違えたか、丸められた容量が与えられているかなどを確かめます。
問題5でbppと理論上の色数を逆算する
問題5:横200×縦150画素の画像の画素データ量が60,000バイトでした。全ビットを固定長の色番号へ使い、追加領域なしで保存しているとします。1画素のビット数と、区別できる色番号の最大数を求めてください。
総画素数は200×150=30,000です。総量をビットへ戻すと60,000×8=480,000ビットなので、1画素の量は480,000÷30,000=16ビットです。この問題では全ビットを色番号に使うので、最大数は2の16乗=65,536通りです。
| 求めるもの | 計算 | 答え |
|---|---|---|
| 総画素数 | 200×150 | 30,000画素 |
| 総ビット数 | 60,000×8 | 480,000ビット |
| 1画素のビット数 | 480,000÷30,000 | 16bpp |
| 色番号の最大数 | 2¹⁶ | 65,536通り |
最初に60,000÷30,000=2と計算した場合、その2の単位はバイト/画素です。色数を2の2乗=4色と答えるのは、バイトとビットを取り違えた結果です。2バイトを16ビットへ直してから、2の累乗を使います。
この色数の答えは「全ビットを色番号に使う」という設問の条件に依存します。実際の16bpp形式でRGB各成分へ何ビット割り当てるか、未使用ビットがあるかなどは形式によって異なります。容量から保存幅が分かっても、条件なしで色成分の内訳まで断定はできません。
問題6で2値画像を複数枚保存する
問題6:縦40画素、横24画素の2値ビットマップを1枚とし、同じ寸法の画像を2,048枚保存します。各画素は2種類の値から一つを選び、必要最小の固定長ビット数で隙間なく保存します。各画像の追加領域は除き、総量をKiBで求めてください。
2種類の値は1ビットで表せるので、1枚の総ビット数は40×24×1=960ビットです。バイトでは960÷8=120バイト。これを2,048枚分にすると120×2,048=245,760バイト、1,024で割って240KiBになります。
2値だから2ビットという計算にはなりません。また、2,048枚という条件は縦や横の長さではなく、1枚の量を求めた後に掛ける個数です。画像1枚の計算と枚数による合計を二段階にすると、数字の役割を見失いにくくなります。
この考え方は単色の文字パターンなどにも使えます。ただし実際のフォントファイルには寸法・文字対応・その他の情報が含まれる場合があります。この演習の結果を、そのまま実在するフォントファイルのサイズと見なさないようにしましょう。設問で除いた情報と、実ファイルの領域は分けて扱います。
よくある間違いは式の意味と単位で検算する

計算ミスを見つけるときは、同じ掛け算をやり直す前に、式へ入れた値の意味を確認します。色数とビット数、各成分と1画素合計、横の画素数と総画素数が混じっていると、電卓の計算が正しくても答えは合いません。
問題1なら1画素3バイトなので、約20万画素の画像は約60万バイトになります。もし約6万バイトや約480万バイトという答えになれば、桁や8での換算を確認できます。正確な値を求める前後に、おおよその大きさを見るのも有効です。
| 間違いの例 | 確認する問い | 直し方 |
|---|---|---|
| 16色を16ビットとして掛けた | 色の数と符号の桁数を分けたか | 16=2⁴なので4ビットへ直す |
| 24bppにさらに3を掛けた | RGB合計がすでに含まれるか | 1画素合計24ビットを使う |
| 縦横2倍なのに容量2倍とした | 縦と横の両方を反映したか | 2×2で画素数4倍 |
| バイトの容量からbppを求めた | ビットへ戻したか | 総バイト数に8を掛ける |
| 理論画素量を実BMPサイズとした | 行末やヘッダーを含む条件か | 問題で指定された領域だけ追加する |
画像が同じ寸法で同じbppなら、画素部分の非圧縮データ量は同じです。単純な背景と細かい写真で見た目が違っても、この式では各画素を一定のビット数で表すため、絵柄そのものは掛け算の条件に入りません。
実際の保存サイズが画像内容によって変わる話を学ぶ場合は、基本情報のデータ圧縮と可逆・非可逆の違いで別の条件として確認できます。ここで出した画素データ量と、圧縮されたファイルの大きさは混ぜずに比較しましょう。
基本情報のビットマップは画素数×bppと条件確認でまとめる
ビットマップの画素データ量は、総画素数×1画素のビット数で求め、バイトなら8で割ります。色数からbppを求めるときは2の累乗を使い、RGB各成分のビット数が与えられたときは合計します。24bppへさらに3を掛けないことも押さえておきましょう。
倍率は横・縦・bppの三つを掛け合わせ、逆算では総量を1画素や1行の量で割ります。KBやKiBの換算、パレットや行末などの追加領域は、問題文の条件を優先してください。求めた値を元の式へ戻すと、単位と数字の両方を確かめられます。
6問で条件の整理に慣れたら、基本情報の無料過去問演習アプリで学習を続けてみてください。各問で「画素数」「bpp」「計算対象」「答えの単位」をメモし、間違えたときはどの条件を読み違えたかを確認すると復習しやすくなります。


コメント