私は現在、タイムラプスを作成しているフォトグラファーを支援するプログラムを開発中です。 一連の画像の輝度の低下または上昇を計算します。したがって、Exposureとisoの変化は、全体的な輝度の低下には影響しません。BufferedImageのピクセル値を乗算すると奇妙な結果になる
私は、最初と最後の画像を表示するシンプルなSwingベースのインターフェイスを使用しています。それらの下にはスライダがあり、画像の明るさを調整します。
これは、DataBufferの基礎となるBufferedImagesを直接操作することによって適用されます。
ほとんどの場合これが動作しますが、問題が発生しているような画像があります。
これはなぜ起こっているのでしょうか?
public BufferedImage getImage(float mult){
BufferedImage retim;
retim = new BufferedImage(img.getWidth(), img.getHeight(), img.getType());
Graphics g = retim.getGraphics();
g.drawImage(img, 0, 0, null);
g.dispose();
DataBufferByte db = (DataBufferByte) retim.getRaster().getDataBuffer();
byte[] bts = db.getData();
for(int i=0;i<bts.length;i++){
float n = bts[i]*mult;
if(n > 255){
bts[i]= (byte) 255;
}else{
bts[i] = (byte) n;
}
}
return retim;
}
これは、浮動小数点数をとり、画像内のすべてのピクセルにそれを乗算する方法です。 (また、バイト値があふれないようにするコードもあります)。
This is the unwanted behaviour (on the left) and the expected on the right.
ありがとうございました!私はすでにこれを克服するためにJavaバイトの擬似署名されていないバージョンを実装しようとしましたが、単純にrescale opを使うともっとうまく動作します;) – I4k