2013-01-25 73 views
12

Tôi có ứng dụng Android tải hình ảnh dưới dạng bitmap và hiển thị hình ảnh đó trong ImageView. Vấn đề là hình ảnh dường như có nền trong suốt; điều này làm cho một số văn bản màu đen trên hình ảnh biến mất trên nền đen.Bitmap của Android: Chuyển đổi pixel trong suốt thành màu

Nếu tôi đặt nền ImageView thành màu trắng, loại tác phẩm đó, nhưng tôi sẽ có đường viền lớn xấu trên hình ảnh được kéo dài để vừa với bố cục (hình ảnh thực tế được chia tỷ lệ ở giữa).

Vì vậy - tôi muốn chuyển đổi các điểm ảnh trong suốt trong Bitmap thành màu đồng nhất - nhưng tôi không thể tìm ra cách thực hiện!

Mọi trợ giúp sẽ được đánh giá cao!

Cảm ơn Chris

+0

Nếu bạn có ảnh chụp màn hình thực sự hữu ích. Nghe có vẻ như tôi đang cố giải quyết điều này một cách sai lầm. Tôi sẽ thử và lớp xem trên đầu trang của nhau để có được hiệu quả mà bạn mong muốn. Bằng cách đó, bạn có chế độ xem màu nền chính, sau đó phủ nó với chế độ xem hình ảnh với nền trắng và hình ảnh nguồn của bạn. – Nathan

Trả lời

22

Nếu bạn bao gồm hình ảnh làm tài nguyên, cách dễ nhất là chỉ chỉnh sửa hình ảnh trong một chương trình như gimp. Bạn có thể thêm nền của bạn ở đó, và chắc chắn về những gì nó sẽ trông giống như và không có sử dụng để xử lý điện sửa đổi hình ảnh mỗi khi nó được tải.

Nếu bạn không tự kiểm soát hình ảnh, bạn có thể sửa đổi nó bằng cách thực hiện một cái gì đó như, giả sử Bitmap của bạn được gọi là image.

Bitmap imageWithBG = Bitmap.createBitmap(image.getWidth(), image.getHeight(),image.getConfig()); // Create another image the same size 
imageWithBG.eraseColor(Color.WHITE); // set its background to white, or whatever color you want 
Canvas canvas = new Canvas(imageWithBG); // create a canvas to draw on the new image 
canvas.drawBitmap(image, 0f, 0f, null); // draw old image on the background 
image.recycle(); // clear out old image 
+0

Cảm ơn - điều đó đã làm điều đó! – ccbunney

5

Bạn có thể lặp qua từng pixel và kiểm tra xem nó là minh bạch.

Điều gì đó tương tự. (Chưa được kiểm tra)

 Bitmap b = ...; 
     for(int x = 0; x<b.getWidth(); x++){ 
      for(int y = 0; y<b.getHeight(); y++){ 
       if(b.getPixel(x, y) == Color.TRANSPARENT){ 
        b.setPixel(x, y, Color.WHITE); 
       } 
      } 
     } 
+2

Nếu bạn đang đi với chiến lược này, không sử dụng 'getPixel'. Bất cứ khi nào bạn lặp qua từng pixel trong 'Bitmap', bạn nên ưu tiên [' getPixels'] (http://developer.android.com/reference/android/graphics/Bitmap.html#getPixels%28int [],% 20int, Thay vào đó,% 20int,% 20int,% 20int,% 20int,% 20int% 29). – kabuko

+1

@MrZander - Tôi đã thử phương pháp này và nó không hoạt động. Thêm một tuyên bố gỡ lỗi cho thấy rằng nó đã tìm thấy các điểm ảnh TRANSPARENT, nhưng đặt chúng thành WHITE (hoặc RED hoặc bất kỳ màu nào khác) không có hiệu lực. Hình ảnh vẫn có vẻ trong suốt .... lạ ??? – ccbunney

+0

@KernowBunney Có lẽ vì bitmap của bạn không thể thay đổi được. Hãy thử thực hiện 'Bitmap b = yourbitmap.copy (Bitmap.Config.ARGB_8888, true)' và thiết lập bitmap mới làm hình ảnh. Ngoài ra, phương pháp này chưa được kiểm tra và tôi không biết đó có phải là phương pháp hiệu quả nhất hay không. @kabuko có thể có một điểm. – MrZander

Các vấn đề liên quan