Предполагается, что этот метод постепенно заменяет изображение, отображаемое на JFrame, на другое изображение.Однако, без какого-либо способа замедлить его, кажется, что он просто меняется с одного изображения на новое.Чтобы замедлить его, я добавил Thread.sleep (1000), чтобы изменения не происходили мгновенно.Однако с этой строкой моя программа полностью зависает.Затем я попытался вставить таймер, как показано ниже, но программа не показала изменений при запуске.Он все еще застыл в той же точке.Кто-нибудь может помочь мне?Предложите лучший способ замедлить его, или как это можно исправить.
Для пояснения: int k - количество постепенных шагов в изменении.К = 1 будет мгновенное изменение.Все большее будет постепенным изменением.int l тем временем управляет соотношением количества отображаемого каждого изображения.
public void morphImg(int width, int height, BufferedImage morphImage, int k) {
//creates new image from two images of same size
final BufferedImage image2 = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
for (int l = 1; l <= k; l++) {
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
//get color from original image
Color c = new Color(image.getRGB(i, j));
//get colors from morph image
Color c2 = new Color(morphImage.getRGB(i, j));
//gets colors at different stages
int r = ((k-l)*c.getRed()/k) + (l*c2.getRed()/k);
int g = ((k-l)*c.getGreen()/k) + (l*c2.getGreen()/k);
int b = ((k-l)*c.getBlue()/k) + (l*c2.getBlue()/k);
Color newColor = new Color(r, g, b);
//set colors of new image to average of the two images
image2.setRGB(i, j, newColor.getRGB());
//display new image
imageLabel.setIcon(new ImageIcon(image2));
final Timer t = new Timer(500,null);
t.setInitialDelay(500);
t.start();
}
}
}
//sets modified image as "original" for further manipulation
setImage(image2);
}
Примечание. Вопрос - это обновление к вопросу, опубликованному здесь Программа зависает во время Thread.sleep () и с таймером