Zadání
Převeďte následující program do paralelní podoby.
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class Prechod {
private static final SimpleDateFormat FORMAT_CASU = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
public static void main(String[] args) {
awh.Image prvni = awh.Image.loadFromFile(args[0]);
awh.Image posledni = awh.Image.loadFromFile(args[1]);
String maska = args[2];
int kroku = args.length == 4 ? Integer.parseInt(args[3]) : 10;
if ((prvni.getWidth() != posledni.getWidth()) || (prvni.getHeight() != posledni.getHeight())) {
awh.Sys.die("Obrazky nemaji stejne rozmery.");
}
int sirka = prvni.getWidth();
int vyska = prvni.getHeight();
long zacatek = System.nanoTime();
for (int i = 0; i < kroku; i++) {
awh.Image snimek = awh.Image.createEmpty(sirka, vyska, awh.Color.BLACK);
for (int y = 0; y < vyska; y++) {
for (int x = 0; x < sirka; x++) {
awh.Color c1 = prvni.getPixel(x, y);
awh.Color c2 = posledni.getPixel(x, y);
awh.Color nova = awh.Color.fromRgb(
(c1.getRed() * (kroku - 1 - i) + c2.getRed() * i) / (kroku - 1),
(c1.getGreen() * (kroku - 1 - i) + c2.getGreen() * i) / (kroku - 1),
(c1.getBlue() * (kroku - 1 - i) + c2.getBlue() * i) / (kroku - 1)
);
snimek.setPixel(x, y, nova);
}
}
String soubor = String.format(maska, i);
snimek.saveToFile(soubor);
System.out.printf("[%s] Ulozen snimek %s (%3.0f%%)\n",
FORMAT_CASU.format(Calendar.getInstance().getTime()),
soubor,
(100. * (i + 1)) / kroku
);
}
long konec = System.nanoTime();
System.out.printf("Vlastni vypocet trval %d ns (%d ms).\n", konec - zacatek, (konec - zacatek) / 1000 / 1000);
}
}
