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); } }