回答編集履歴
1
途中からグレースケールと思い違いしていたので訂正(概ね変わらないのですがパレットの設定が異なる)
answer
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
【過去の内容】
|
1
2
|
C#でBitmapこのフォーマット変換をするのは実は結構しんどいです。
|
2
3
|
まぁ下記の機能を実装したライブラリは探せば見つかると思うので探した方が早いとおもいますが参考までに。
|
3
4
|
|
@@ -16,8 +17,17 @@
|
|
16
17
|
このように24bitと8bitの各画素にアクセスしながら値を変換して移していけばフォーマットの変換はほぼ完了です。
|
17
18
|
|
18
19
|
最後に値を入れた8bitBitmapのパレットを設定してやります。
|
20
|
+
~~打ち消し線~~
|
19
|
-
値は先頭からColor(i,i,i)でiを0から255までです。
|
21
|
+
値は先頭から~~Color(i,i,i)~~Color.FromArgb(i,i,i)でiを0から255までです。
|
20
22
|
今回254色とのことですが、パレットの各色は画素値に対応しているので255まで入れます。
|
21
23
|
(ですのでカラーの256色8bitBitmapというのもできたりします)
|
22
24
|
|
23
|
-
あとは保存すれば完了です。
|
25
|
+
あとは保存すれば完了です。
|
26
|
+
|
27
|
+
【訂正】
|
28
|
+
途中から勝手にグレースケールの254色と勘違いしてたので訂正入れます。
|
29
|
+
減色自体はできたということなので最後のパレット部分を上手いことやってやればいいんじゃないかと思います。
|
30
|
+
つまり減色された画像データに含まれるRGBの組とそれに対応する値(8bit用)を定義して対応が付けられるように8bit側の各画素を上記の方法で書き換えて、最後にパレットを対応させれば行けると思います。
|
31
|
+
|
32
|
+
.Cloneによる方法は正直よく分からないです。
|
33
|
+
減色済みのやつに対して上手にパレットを生成するような内部実装になっていないんでしょうね...
|