回答編集履歴

1

他の問題点を追記

2020/06/24 23:21

投稿

thkana
thkana

スコア7652

test CHANGED
@@ -105,3 +105,29 @@
105
105
  ```
106
106
 
107
107
  質問も、ソースコード部分を[シンタックスハイライト](https://teratail.com/help/question-tips#questionTips3-5-1)してね。(<code>ボタンの他にもコードの前後を```のみの行で囲っても可)
108
+
109
+
110
+
111
+ ---
112
+
113
+ ディザの方、「画素の足し算」のやり方が間違っている。
114
+
115
+ pixels[]から読みだした要素の値は、
116
+
117
+ 不透明度*0x1000000+R*0x10000+G*0x100+B (不透明度,R,G,Bはそれぞれ0~255の範囲の整数)
118
+
119
+ 例えば、R=G=B=128(灰色)の場合十六進表記すれば
120
+
121
+ 0xff808080
122
+
123
+ で、これを同じR=G=B=128と足したとすると
124
+
125
+ 0xff010100
126
+
127
+ になって、つまりR=1,G=1,B=0の意。
128
+
129
+ このように、2つの画素値をそのまま足しても画素データとして「足した」意味にはならない。
130
+
131
+
132
+
133
+ グレースケールにしているのだからR/G/Bは同じ値になっているはずなので、例えば代表値としてgreen()を取り出すとか、あるいはbrightness()関数で輝度データを取り出して、それについて演算を行い、0~255の範囲内に収めた上で画素データとして再構成(color()関数が便利)すべき。