回答編集履歴
1
他の問題点を追記
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()関数が便利)すべき。
|