Estou tentando modificar brilho de uma imagem SWT e não consegui.
Não sei qual é o algoritmo para se modificar brilho e também não achei nada especifico.
Consegui apenas convertendo a imagem SWT para AWT e convertendo novamente, porém esta lento e gostaria de fazer direto.
Se alguem puder me ajudar.
Segue trecho do código.
BufferedImage buffImg = SWTImageUtil.convertToAWT(screenshot.getImageData());
RescaleOp rescaleOp = new RescaleOp(0.7f, 15, null);
rescaleOp.filter(buffImg, buffImg);
filteredImageData = SWTImageUtil.convertToSWT(buffImg);
Seguinte.
Descobri que para modificar o brilho (diminuir por exemplo), basta obter as cores RGB (vermelho, verde e azul) e diminui-las proporcionalmente.
Desenvolvi então um algoritmo que percorre os pixels da imagem e chega no resultado que preciso baseado em uma variação de brilho.
Esta levando em torno de 0.17 segundos para executar.
Para executar o mesmo.
Criar uma classe utilitária e adicionar o método darkImage.
public static ImageData darkImage(ImageData imageData, float variacaoBrilho) {
PaletteData palette = imageData.palette;
ImageData imgRet = new ImageData(imageData.width,
imageData.height, imageData.depth, palette);
for (int x = 0; x < imageData.width; x++) {
for (int y = 0; y < imageData.height; y++) {
int pixel = imageData.getPixel(x, y);
RGB rgbPixel = palette.getRGB(pixel);
int reds = rgbPixel.red >> 1;
int greens = rgbPixel.green >> 1;
int blues = rgbPixel.blue >> 1;
int pixelTrat = palette.getPixel(
new RGB(reds + ((int) (reds / variacaoBrilho)),
greens + ((int) (greens / variacaoBrilho)),
blues + ((int) (blues / variacaoBrilho))));
imgRet.setPixel(x, y, pixelTrat);
}
}
return imgRet;
}
A principio resolveu meu problema, mas se alguem tiver alguma idéia para otimização, por favor acrescente aqui.