0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【自分用メモ】 ちょっとした魔法のメモ(極小アルゴリズムのメモ)

Last updated at Posted at 2024-04-10

タイトル通り実際に自分が使ったものでbit操作が中心の忘備録。高級なライブラリがいつでも使えるとは限らないので。今後も順次追加できたらいいな。

ビット順の入れ替え

8bit 2進数 D₇ D₆ D₅ D₄ D₃ D₂ D₁ D₀ を D₀ D₁ D₂ D₃ D₄ D₅ D₆ D₇にする、要はMSBとLSBを逆順にする

x = ((x & 0x55) << 1) | ((x & 0xAA) >> 1); 
x = ((x & 0x33) << 2) | ((x & 0xCC) >> 2); 
x = (x << 4) | (x >> 4); 
x &= 0xff; 
  • 1~3行目は順番不問、Xに1バイトの制限があれば4行目は不要
  • ビットストリームは当然D₀から送られてくる訳で、左シフトしながらbyteに格納するとD₀-D₇になる。これをbyteデータとして意味あるものにするためには順番をひっくり返す必要がある
  • 要はバイト内で逆順ソートしてるだけ
  • swapの単位を広げていけば16bit(2byte)版、32bit(4byte)版、と拡張できそう

BMPファイルの操作

24bit(16万色)BMP(並び順はBGR)を16bit(6.5万色)RGBに変換する

buffer[d]   = (buf[s]>>3 | buf[s+1]>>2<<5 | buf[s+2]>>3<<11) >> 8
buffer[d+1] = (buf[s]>>3 | buf[s+1]>>2<<5 | buf[s+2]>>3<<11) & 0xff
s += 3
d += 2

16bit(6.5万色)RGBをファイル格納用に16bitBGRに変換する

newColor = ((color >> 5) & 0x0007c0 | \
            (color >> 6) & 0x00001f | \
            (color << 11) & 0x00f800)

(以下順次追加)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?