2011-02-07 45 views
6

Tôi đã gặp sự cố với dải các tệp PNG của mình. Đào sâu vào vấn đề đã mang lại hai giải pháp. Cả hai đều có ý nghĩa riêng, nhưng cùng nhau thì không. Các giải pháp tôi đã phát hiện:Giải pháp dải băng PNG khó hiểu

1) Di chuyển tệp PNG vào thư mục "thô". Điều này ngăn AAPT khỏi "tối ưu hóa" hình ảnh dẫn đến dải.

2) Thay đổi định dạng pixel của cửa sổ Hoạt động thành RGBA_8888 (tức là trong onCreate thêm dòng này "getWindow(). SetFormat (PixelFormat.RGBA_8888)"). Trên Android 2.2 trở xuống, định dạng pixel mặc định là 16 bit (565).

Tôi đã thử cả hai cách này và chúng chỉnh sửa hiệu ứng dải trong hình ảnh của tôi, tuy nhiên bây giờ tôi thậm chí còn bối rối hơn với những gì Android đang làm.

Một mặt, nếu tôi để PNG của mình trong thư mục có thể kéo được, nó được "tối ưu hóa", kết quả là hiệu ứng dải trong hình ảnh. Nó biến mất một cách kỳ diệu khi tôi thay đổi định dạng pixel thành 32-bit. Nếu hình ảnh đã được "tối ưu hóa" mặc dù, tôi đã có thể mong đợi dải vẫn còn.

Mặt khác, nếu tôi di chuyển PNG sang thư mục thô, nó sẽ giữ lại độ dốc đẹp và hiển thị độc đáo ngay cả khi pixelFormat được cho là 16 bit.

Nếu có ai có bất kỳ thông tin chi tiết nào về những gì đang diễn ra, tôi sẽ đánh giá cao điều đó.

Cảm ơn,

-Dan

Trả lời

8

Tôi tin rằng nó khá đơn giản:

Bạn phải nghĩ đến các định dạng pixel của hoạt động của bạn (RGBA_8888) như là một tối ưu hóa DEFAULT cho bitmap.

Nếu nó không được đặt, thì trước 2.2, theo mặc định nó sẽ nén bitmap của bạn thành RGB_565.

Nhưng nếu bạn tạo một bitmap theo chương trình và đặt nó thành RGBA_8888, khi đó ứng dụng sẽ được ứng dụng sử dụng như vậy.

Tương tự áp dụng khi bạn đặt bitmap vào thư mục thô: Mặc dù PixelFormat mặc định được đặt thành RGB_565, hoạt động sẽ sử dụng nó như không có "tối ưu hóa" nó.

Khi bạn đặt bitmap vào thư mục thô, nó sẽ không bị nén và được sử dụng như mặc dù PixelFormat mặc định vẫn là RGB_565.

+1

Ah, vì vậy thiết bị * có khả năng hiển thị màu 32 bit, nhưng Hoạt động được đặt thành chỉ sử dụng 16 bit trước 2.3 nếu tôi đọc phản hồi của bạn một cách chính xác. – Dan

+0

Hầu như: "nhưng Hoạt động được đặt để sử dụng 16 bit làm mặc định trước 2.3". Nói "CHỈ" có nghĩa là không có khả năng quản lý cả hai bit 16 và 32 cùng một lúc nhưng thực tế là nó. – Yahel

+0

Được rồi, cảm ơn phản hồi của bạn. Tôi nghĩ tôi đã hiểu rồi. – Dan

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