teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

他の問題点を追記

2020/06/24 23:21

投稿

thkana
thkana

スコア7735

answer CHANGED
@@ -51,4 +51,17 @@
51
51
  noLoop();/////一度やれば十分
52
52
  }
53
53
  ```
54
- 質問も、ソースコード部分を[シンタックスハイライト](https://teratail.com/help/question-tips#questionTips3-5-1)してね。(<code>ボタンの他にもコードの前後を```のみの行で囲っても可)
54
+ 質問も、ソースコード部分を[シンタックスハイライト](https://teratail.com/help/question-tips#questionTips3-5-1)してね。(<code>ボタンの他にもコードの前後を```のみの行で囲っても可)
55
+
56
+ ---
57
+ ディザの方、「画素の足し算」のやり方が間違っている。
58
+ pixels[]から読みだした要素の値は、
59
+ 不透明度*0x1000000+R*0x10000+G*0x100+B (不透明度,R,G,Bはそれぞれ0~255の範囲の整数)
60
+ 例えば、R=G=B=128(灰色)の場合十六進表記すれば
61
+ 0xff808080
62
+ で、これを同じR=G=B=128と足したとすると
63
+ 0xff010100
64
+ になって、つまりR=1,G=1,B=0の意。
65
+ このように、2つの画素値をそのまま足しても画素データとして「足した」意味にはならない。
66
+
67
+ グレースケールにしているのだからR/G/Bは同じ値になっているはずなので、例えば代表値としてgreen()を取り出すとか、あるいはbrightness()関数で輝度データを取り出して、それについて演算を行い、0~255の範囲内に収めた上で画素データとして再構成(color()関数が便利)すべき。