Saya cukup baru dalam pemrosesan gambar, dan saat ini saya sedang mengerjakan aplikasi mirip cat yang akan menampilkan isi ember. Namun, saya tidak tahu apa algoritma terbaik untuk bucket-fill.
Saya menerapkan contoh yang saya temukan dari situs ini , namun, ia mengalami masalah loop tak terbatas ketika pengguna mencoba mengisi area yang sudah diisi dengan warna yang sama.
Saat ini saya sedang mengatasi masalah itu dengan mengisi kiri, kanan, atas dan bawah; namun, saya membuatnya sehingga setelah piksel diisi ke kiri, tidak dapat mengisi ke kanan, yang berarti bentuk seperti:
tidak akan diisi dengan benar jika alat ember digunakan pada titik merah.
Oleh karena itu, saya berharap seseorang mengetahui suatu algoritma atau tautan ke salah satu yang akan menyelesaikan semua masalah ini.
Informasi Tambahan: Ini akan diimplementasikan menggunakan Javascript sebagai alat cat. Ini akan digunakan secara online menggunakan elemen Canvas.
sumber
Jawaban:
Sepertinya Anda benar-benar mencari apa yang disebut algoritma Flood Fill. Mungkin itulah sebabnya Anda tidak menemukan banyak contoh untuk itu. Ada beberapa metode Flood Fill yang tercantum di halaman Wikipedia untuk algoritme . Saya sangat merekomendasikan salah satu metode 'antrian' non-rekursif.
sumber
I highly recommend one of the non-recursive, 'queued' methods.
- Bisakah Anda menjelaskan mengapa?Saat ini saya sedang melakukan hal yang sama. Namun, ketika saya mengalami masalah yang Anda tunjukkan, saya memilih untuk hanya mengakhiri fungsi jika alat diklik pada area dengan warna yang sama yang Anda coba lukis (ini juga tampaknya merupakan perilaku ms-paint) .
Metode yang antri harus sangat intuitif bagi siapa pun yang memiliki pengalaman pemrograman.
Jika mengecat area di sekitar titik dengan warna yang sama dengan cat Anda, Anda bisa:
Jika mau, Anda dapat melihat kode saya (cukup memalukan) di sini .
Jauh dari cepat tetapi bekerja dengan baik ...
sumber