tôi muốn lấp đầy màu sắc trong vùng trắng cho các ứng dụng Sơn dựa vì vậy hãy cho tôi gợi ý cho làm thế nào để làm công việc này ..làm thế nào để điền vào màu sắc trong hình ảnh trong khu vực cụ thể?
Trả lời
Tôi tìm thấy giải pháp với lũ điền algoritham điền
private void FloodFill(Bitmap bmp, Point pt, int targetColor, int replacementColor){
Queue<Point> q = new LinkedList<Point>();
q.add(pt);
while (q.size() > 0) {
Point n = q.poll();
if (bmp.getPixel(n.x, n.y) != targetColor)
continue;
Point w = n, e = new Point(n.x + 1, n.y);
while ((w.x > 0) && (bmp.getPixel(w.x, w.y) == targetColor)) {
bmp.setPixel(w.x, w.y, replacementColor);
if ((w.y > 0) && (bmp.getPixel(w.x, w.y - 1) == targetColor))
q.add(new Point(w.x, w.y - 1));
if ((w.y < bmp.getHeight() - 1)
&& (bmp.getPixel(w.x, w.y + 1) == targetColor))
q.add(new Point(w.x, w.y + 1));
w.x--;
}
while ((e.x < bmp.getWidth() - 1)
&& (bmp.getPixel(e.x, e.y) == targetColor)) {
bmp.setPixel(e.x, e.y, replacementColor);
if ((e.y > 0) && (bmp.getPixel(e.x, e.y - 1) == targetColor))
q.add(new Point(e.x, e.y - 1));
if ((e.y < bmp.getHeight() - 1)
&& (bmp.getPixel(e.x, e.y + 1) == targetColor))
q.add(new Point(e.x, e.y + 1));
e.x++;
}
}}
lũ android:
Xem FloodFill
Đẹp nhất Nhưng nếu tôi chỉ thêm thuật toán này vào ứng dụng Android của tôi nếu tôi gọi hàm FloodFill (với các thuộc tính tương ứng) thì nó sẽ hoạt động? Và những gì tôi cần phải cung cấp cho là điểm thuộc tính trong chức năng này? –
cảm ơn @Hardik, đây thực sự là một thuật toán được viết độc đáo. nhưng đối với điện thoại Android, nó có vẻ rất chậm. bạn có biết cách nào khác để lấp đầy lũ lụt không? –
liên kết này nhanh hơn: http://stackoverflow.com/a/17426163/401403 – Arash
Dưới đây là một ứng dụng nhanh chóng sử dụng Python và OpenCV (nên có sẵn trên Android nếu bạn cố gắng hết sức):
"""Flood fills with random color on click. Press `q' to exit."""
import cv
import sys
import random
TOL = 10
TOL_BGR = (TOL, TOL, TOL, 0)
def click(event,x,y,flags,im):
if event == cv.CV_EVENT_LBUTTONDOWN:
b,g,r = [ random.random() * 255 for i in range(3) ]
cv.FloodFill(im, (x,y), (b,g,r,0), TOL_BGR, TOL_BGR)
im = cv.LoadImage(sys.argv[1], cv.CV_LOAD_IMAGE_COLOR)
cv.NamedWindow(__file__, 1)
cv.SetMouseCallback(__file__, click, im)
while True:
cv.ShowImage(__file__, im)
key = cv.WaitKey(33)
if chr(key & 0xff) == 'q':
break
cv.SaveImage('floodfill.png', im)
Mỗi khi người dùng nhấp vào hình ảnh, ứng dụng sẽ tràn ngập vị trí nhấp chuột làm hạt giống. Màu sắc được chọn ngẫu nhiên. Bạn có thể thay đổi dung sai bằng cách sửa đổi giá trị của TOL (hoặc TOL_BGR). Dưới đây là kết quả sau một vài lần nhấp chuột:
Thuật toán nói chung là như nhau bất kể những gì công nghệ bạn sử dụng.
bạn có thể vui lòng gửi mã nguồn, vì tôi không thể hiểu được phần này – dineshprasanna
Không, tôi sẽ không gửi email cho bạn mã codez. Mã nguồn là trong câu trả lời của tôi, anyway. Nếu bạn không hiểu bất cứ điều gì, sau đó xin vui lòng đọc tài liệu cho các chức năng có liên quan - nó có sẵn. – misha
ok không có vấn đề, cảm ơn bạn đã trả lời tôi sẽ thử – dineshprasanna
1) Có Split lên hình ảnh này cho mỗi phần màu riêng rẽ với cùng kích thước như hình ảnh thực tế và phần khác là minh bạch. 2) Có hình ảnh hoàn chỉnh với mỗi phần sơn màu khác nhau trong thư mục drawable ur - đây chỉ là hình ảnh tham khảo.
3) Thêm tất cả những hình ảnh chia tay trong cách bố trí khung và thiết lập tất cả chia tay vô hình ban đầu và thiết lập có thể nhìn thấy hình ảnh thực tế chỉ
4) đang nóng màu cho từng chia tay với hình ảnh tham khảo ur (bước 2) Ví dụ: handSplitImageColor = green;
4) Đặt trình nghe cho bố cục khung tìm vị trí x và y và chuyển vị trí x và y sang hình ảnh tham chiếu ur (bước 2) và tìm màu ở vị trí cụ thể đó và khớp màu với bước 4 và điền thông tin cụ thể vào hình ảnh đó và đặt mức hiển thị đúng cho hình ảnh được chia nhỏ đó. Vì vậy, chỉ có phần đó sẽ được lấp đầy bởi màu sắc vì phần khác là trong suốt.
Đây là các bước tôi đã sử dụng cho một trong các loại vấn đề tương tự của tôi.
Nhưng tôi không nghĩ đây là giải pháp tốt hơn nhưng nó hoạt động tốt cho tôi.
- 1. cách thay đổi màu sắc của một khu vực cụ thể trên bản đồ api v2 của Google trong android
- 2. Làm thế nào để điền vào đối tượng bitmap với màu sắc trong Android
- 3. Làm thế nào để thay đổi một màu cụ thể trong một hình ảnh?
- 4. Cách phủ màu văn bản của mục danh sách trong khu vực cụ thể?
- 5. thay thế màu sắc trong một hình ảnh trong C#
- 6. Làm cho mỗi pixel của một hình ảnh có màu sắc cụ thể trong suốt
- 7. Làm thế nào để vẽ một khu vực của một bitmap với 'màu trắng trong suốt'?
- 8. Làm thế nào để làm cho LinearLayout trong scrollview để lấp đầy toàn bộ khu vực
- 9. Làm thế nào để vẽ một hình chữ nhật trên một khu vực cụ thể trong một đồ thị matplotlib
- 10. Làm thế nào để có được UIImage của một khu vực cụ thể trong ios màn hình hiện
- 11. Điền các bổ sung cho các khu vực có matplotlib
- 12. Làm thế nào để có được một hình ảnh màu sắc trong iPhone sdk
- 13. Python OpenCV - Tìm các khu vực màu đen trong một hình ảnh nhị phân
- 14. Lập trình có ảnh chụp màn hình của khu vực cụ thể
- 15. Làm thế nào để vẽ trong khu vực nonclient?
- 16. Xử lý khu vực có thể click vào ImageView
- 17. Nhận tất cả tọa độ đa giác của khu vực hình ảnh cụ thể?
- 18. Làm thế nào để bạn cắt một khu vực cụ thể với kẹp giấy trong Rails (3)?
- 19. làm thế nào để làm cho hình ảnh màu sắc sang màu đen và trắng trong Android
- 20. Sửa màu sắc của hình ảnh trong ruby
- 21. Làm cách nào để điền vào "các lỗ" trong một hình ảnh?
- 22. Làm cách nào để phát hiện một liên lạc trên một khu vực cụ thể
- 23. làm thế nào để chương trình kéo và thả với snap vào khu vực trong Objective-C cho IOS
- 24. Làm thế nào để thay thế màu sắc trong BufferedImage trong JAVA
- 25. Cách phóng to khu vực hình ảnh cụ thể trên Canvas theo chiều ngang
- 26. Làm thế nào để làm cho khu vực vẽ Canvas trong suốt trong android?
- 27. Làm thế nào để remap màu sắc trong một DrawingBrush?
- 28. Làm thế nào để sao chép một khu vực hình ảnh bằng cách sử dụng opencv trong python?
- 29. Thay thế một màu cụ thể bên trong hình ảnh bằng một màu khác
- 30. Màu sắc cho vùng C# bị sụp đổ trong studio hình ảnh 2012
hãy xem thuật toán lấp đầy cổ điển: http://en.wikipedia.org/wiki/Flood_fill – Jave
Xin chào, Đây là [liên kết] [1] để nhận được điểm của hình ảnh. có nghĩa là chỉ một phần thực của hình ảnh và loại bỏ phần trong suốt. nhưng tôi không thể ràng buộc khu vực. [1]: http://brownandroidattack.blogspot.com/2010/03/image-transparency-aka-absurd.html –
Cảm ơn rất nhiều Jave về thông tin của alogrithm floodf –