以下に示すように、マトリックスを使用してグレースケールし、フォローループで R + G + B 色を 3 で割るための画像フィルターに取り組んでいます。
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
Color c = inPixels[i][j];
outPixels[i][j] = grayLevels[(c.getRed() + c.getGreen() + c.getBlue()) / 3];
}
}
でも、力を入れてやった方がいいと聞いたので、こういうことをやってみたのですが、うまくいかないようです。このようにフィルタリングしようとすると、GUI アプリケーションがフリーズします。おそらく、誰かがこのループで私を助けることができますか?
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
short[][] intensity = computeIntensity(inPixels);
Color c = inPixels[i][j];
outPixels[i][j] = grayLevels[(c.getRed() + c.getGreen() + c.getBlue()) / 3];
}
必要に応じて、使用している他のクラスを投稿できますが、コードはほとんど自明であるため、必要ではないと思います。
編集:ここに強度法があります:
protected short[][] computeIntensity(Color[][] pixels) {
int height = pixels.length;
int width = pixels[0].length;
short[][] intensity = new short[height][width];
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
Color c = pixels[i][j];
intensity[i][j] = (short) ((c.getRed() + c.getGreen() + c
.getBlue()) / 3);
}
}
return intensity;
}
ありがとう、マイケル。