Java: Cara Melukis Grafik Sentiasa Berubah
Melukis grafik yang sentiasa berubah-ubah boleh menjadi tugas yang mencabar, terutamanya apabila menangani isu prestasi dan mengoptimumkan proses rendering. Dalam artikel ini, kami akan meneroka teknik dan pengubahsuaian untuk meningkatkan prestasi enjin grafik tersuai anda, yang ditunjukkan melalui senario di mana 64 piksel di sekeliling kedudukan tetikus semasa dilukis diperbesarkan pada borang.
Kod asal mengalami masalah daripada potensi kelambatan akibat ketidakcekapan dalam pengambilan dan pemaparan warna piksel. Mari kita melalui satu siri pengoptimuman untuk menangani cabaran ini:
Mengoptimumkan Pendapatan Warna Piksel
Daripada mendapatkan semula warna piksel satu demi satu, kita boleh menggunakan robot.createScreenCapture( ...) untuk mengambil semua 64 piksel dalam satu operasi. Ini menghapuskan overhed berbilang pengambilan warna individu.
Memperkenalkan Keratan Pintar
Untuk mengelakkan lukisan semula yang tidak perlu, kami telah melaksanakan "keratan pintar." Dengan mengesan piksel yang telah berubah sejak kemas kini terakhir, kami boleh mengehadkan kawasan mengecat semula kepada kawasan yang terjejas sahaja. Ini mengurangkan jumlah lukisan semula yang diperlukan dengan ketara.
Peningkatan Benang
Kami telah memastikan bahawa semua kemas kini model dan pengecatan semula paparan berlaku pada Benang Penghantaran Acara (EDT). Ini menjamin interaksi yang konsisten dan responsif tanpa syarat perlumbaan.
Keputusan
Selepas melaksanakan pengoptimuman ini, aplikasi kini mengemas kini serta-merta kepada mata manusia, dengan 289 kemas kini skrin mengambil masa terkumpul hanya 1 saat.
Kod Penambahbaikan
Kaedah Cat Semula Diubahsuai
Kaedah cat semula kini hanya mengecat semula kawasan yang diperlukan.
repaint(40 + x * STEP, 45 + y * STEP, 40 + (x * STEP) - 3, 45 + (y * STEP) - 3);
Benang Ticker
Benang ticker mengesan perubahan warna piksel dengan cekap dan mengemas kini model dengan sewajarnya.
.... final BufferedImage capture = robot.createScreenCapture(rect); for (int x = 0; x < 8; x++) { for (int y = 0; y < 8; y++) { final Color pixelColor = new Color(capture.getRGB(x, y)); if (!pixelColor.equals(view.getColorAt(x, y))) { final int finalX = x; final int finalY = y; SwingUtilities.invokeLater(new Runnable() { public void run() { view.setColorAt(finalX, finalY, pixelColor); } }); } } }
Dengan menggabungkan pengoptimuman dan teknik ini, anda boleh meningkatkan enjin grafik tersuai anda dengan ketara dan mengendalikan grafik yang sentiasa berubah-ubah dengan mudah, walaupun dalam senario yang mencabar.
Atas ialah kandungan terperinci Prestasi Grafik Java: Bagaimana Saya Boleh Mengoptimumkan Lukisan yang Sentiasa Menukar Piksel?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!