Mavzu: Java dasturlash tilining dinamik tasvirlarni parallel qayta ishlashdagi imkoniyatlari



Yüklə 28,69 Kb.
səhifə3/3
tarix07.01.2024
ölçüsü28,69 Kb.
#206979
1   2   3
1702542257 (2)

Dastur kodi:
import javax.media.jai.JAI;
import javax.media.jai.PlanarImage;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

public class ParallelImageProcessing {


public static void main(String[] args) {
// Dynamic rasmlarni yuklash
List dynamicImages = loadDynamicImages();

// Protsessorlarning mavjudligiga mos keladigan thread pool yaratish


int numProcessors = Runtime.getRuntime().availableProcessors();
ExecutorService executorService = Executors.newFixedThreadPool(numProcessors);

// Har bir dynamic rasmni parallel ravishda ishlatish


for (BufferedImage image : dynamicImages) {
executorService.submit(() -> processImage(image));
}

// Executor service'ni yopish va barcha vazifalarning bajarilishini kutilish


executorService.shutdown();
try {
executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
}

System.out.println("Rasmlar ishlash jarayoni yakunlandi.");


}

private static List loadDynamicImages() {


// TODO: Dynamic rasmlarni yuklash uchun kerakli logikani implement qiling
// Misol uchun, BufferedImage obyektlarining ro'yxatini olishni tasavvur qilamiz
List dynamicImages = new ArrayList<>();
// Load or generate your dynamic images and add them to the list
// For example:
BufferedImage image1 = new BufferedImage(800, 600, BufferedImage.TYPE_INT_RGB);
BufferedImage image2 = new BufferedImage(1200, 900, BufferedImage.TYPE_INT_RGB);
dynamicImages.add(image1);
dynamicImages.add(image2);
return dynamicImages;
}

private static void processImage(BufferedImage image) {


// Rasmlarda ishlovchi operatsiyalarni bajaramiz
PlanarImage planarImage = JAI.create("awtimage", image);
// JAI yoki boshqa kutubxonalardan foydalanib talab etilgan rasm operatsiyalarini qo'llashingiz mumkin
// Misol uchun, filtrlarni qo'llashingiz, o'lchamlarni o'zgartirishingiz, qirqishingiz yoki rasmni o'zgartirishingiz mumkin

// Ishlash yakunlandikdan keyin, natijani saqlashingiz yoki qo'shimcha operatsiyalarni bajarishingiz mumkin


// Sodda o'zgaruvchanlarni chiqaring, masalan, rasmning o'lchamlarini chop eting
System.out.println("Ishlangan rasm o'lchamlari: " + planarImage.getWidth() + "x" + planarImage.getHeight());
}
}

Asosiy usul - dasturning kirish nuqtasi. Qayta ishlash uchun dinamik tasvirlar ro'yxatini olish uchun dastlab loadDynamicImages usulini chaqiradi.


Mavjud protsessorlar soni Runtime.getRuntime().availableProcessors() yordamida parallel ishlov berish uchun ishlatiladigan iplarning optimal sonini aniqlash uchun olinadi.
ExecutorService Executors.newFixedThreadPool(numProcessors) yordamida mavjud protsessorlar asosida belgilangan miqdordagi iplar bilan iplar hovuzini yaratish uchun yaratilgan.
Loop dynamicImages ro'yxati bo'ylab takrorlanadi va har bir tasvir uchun lambda ifodasi () -> processImage(tasvir) yordamida bajaruvchiServicega topshiriq yuboriladi. Ushbu lambda ifodasi parallel ravishda bajarilishi kerak bo'lgan tasvirni qayta ishlash vazifasini ifodalaydi.
Barcha topshiriqlarni topshirgandan so'ng, execcutorService execcutorService.shutdown() yordamida o'chiriladi, ya'ni yangi topshiriqlar qabul qilinmaydi. Keyin dastur execcutorService.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS) yordamida barcha vazifalarning bajarilishini kutadi.
Barcha vazifalar bajarilgandan so'ng, dastur "Rasmlar ishlash jarayoni yakunlandi" chop etadi. tasvirni qayta ishlash jarayoni tugaganligini bildirish uchun.
loadDynamicImages usuli dinamik tasvirlarni yuklash yoki yaratish uchun javobgardir. Taqdim etilgan kodda BufferedImage yordamida ma'lum o'lchamlarga ega ikkita misol tasvir yaratilgan va dynamicImages ro'yxatiga qo'shilgan.
Har bir tasvir uchun processImage usuli chaqiriladi. Ushbu usul ichida tasvir JAI.create("awtimage", rasm) yordamida PlanarImage ga aylantiriladi. Bu JAI yoki boshqa kutubxonalar tomonidan taqdim etilgan turli xil tasvirlarni qayta ishlash operatsiyalaridan foydalanish imkonini beradi. Taqdim etilgan kodda u oddiygina planarImage.getWidth() va planarImage.getHeight() yordamida qayta ishlangan tasvirning o'lchamlarini chop etadi.
Java ExecutorService va Java Advanced Imaging (JAI) kutubxonasidan foydalangan holda parallel ravishda tasvirni qayta ishlashni namoyish etadi. U dinamik tasvirlarni yuklaydi yoki yaratadi va ularni bir nechta iplar yordamida parallel ravishda qayta ishlaydi. Mavjud protsessorlar asosida iplar soni aniqlanadi. Har bir rasm JAI yordamida PlanarImage ga aylantiriladi va turli xil tasvirni qayta ishlash operatsiyalari qo'llanilishi mumkin. Taqdim etilgan kodda tasvir o'lchamlari ishlov berish natijasida chop etiladi. Dastur tasvirni qayta ishlash jarayoni tugaganligini ko'rsatishdan oldin barcha vazifalar tugashini kutadi.

Yüklə 28,69 Kb.

Dostları ilə paylaş:
1   2   3




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©www.azkurs.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin