Floyd-Steinberg アルゴリズムを Java で実装しようとしていますが、まだエラーがありますか?! 私のコードでは解決できません。これを解決する方法についてアドバイスがあるかもしれません。
ここに方法があります
public DitheringGUI dith(String fileName) {
DitheringGUI g = new DitheringGUI(fileName);
for(int y = 0 ; y<g.img.getHeight();y++){
for(int x = 0 ; x < g.img.getWidth();x++){
Color oldColor = g.img.getColor(x, y);
Color newColor = palette(oldColor);
g.img.set(x, y, newColor);
int quant_Error = oldColor.getRed() - newColor.getRed();
if(x+1 < g.img.getWidth()) {
g.img.set(x+1,y,new Color( g.img.getColor(x+1, y).getRed()+quant_Error*(7/16),
g.img.getColor(x+1, y).getRed()+quant_Error*(7/16),
g.img.getColor(x+1, y).getRed()+quant_Error*(7/16)));
}
if(x-1 >=0 && y+1 <g.img.getHeight()){
g.img.set(x-1,y+1,new Color( g.img.getColor(x-1, y+1).getRed()+quant_Error*(3/16),
g.img.getColor(x-1, y+1).getRed()+quant_Error*(3/16),
g.img.getColor(x-1, y+1).getRed()+quant_Error*(3/16)));
}
if(y+1 < g.img.getHeight()){
g.img.set(x,y+1,new Color( g.img.getColor(x, y+1).getRed()+quant_Error*(5/16),
g.img.getColor(x, y+1).getRed()+quant_Error*(5/16),
g.img.getColor(x, y+1).getRed()+quant_Error*(5/16)));
}
if(x+1 < g.img.getWidth() && y+1 < g.img.getHeight()){
g.img.set(x+1,y+1,new Color( g.img.getColor(x+1, y+1).getRed()+quant_Error*(1/16),
g.img.getColor(x+1, y+1).getRed()+quant_Error*(1/16),
g.img.getColor(x+1, y+1).getRed()+quant_Error*(1/16)));
}
}
}
return g;
}
実際の問題は、それが白黒であり、ディザリングされていないことです。つまり、グレースケールはありません。
私の入力はこれです:http://www.directupload.net/file/d/3985/spd2k9wq.png
私の出力は次のとおりです。http://www.directupload.net/file/d/3985/s24rq7qo.png
「ディザリングされた」画像は過度にディザリングされており、ほとんど黒くなっていることに注意してください。