Tôi đã làm điều này và nó hoạt động khá độc đáo:
iOS: Applying a RGB filter to a greyscale PNG
Tuy nhiên, nó là lừa dối, họ sẽ bổ sung, vì vậy đối với (ví dụ) các thành phần màu đỏ của mỗi pixel, R_dest = R_src + R_tint
Nếu bạn muốn kiểm soát chi tiết, ví dụ: bạn có thể muốn trích xuất giá trị thang độ xám cho từng pixel bằng cách trung bình các thành phần RGB (với trọng số thích hợp), và sau đó nhân giá trị này với màu của bạn, do đó màu kết quả sẽ là màu xám (Sr, Sg, Sb) * {Tr, Tg, Tb}
Điều này sẽ yêu cầu tạo đoạn bộ nhớ, tạo ra một bối cảnh bitmap vẽ vào đoạn này, vẽ hình ảnh của bạn vào bối cảnh này, sao chép toàn bộ bộ nhớ để lưu giữ, xử lý - lấy dữ liệu từ bản sao và sửa đổi cửa hàng sao lưu gốc, sau đó trích xuất một hình ảnh từ cửa hàng sao lưu gốc và giải phóng mọi thứ bạn đã phân bổ.
Problem reconstituting UIImage from RGBA pixel byte data
Thư viện này đã làm tất cả mọi thứ cho bạn, nó không phải là con đường hiệu quả nhất, nhưng nó được công việc làm. iirc anh ta sử dụng malloc khi anh ta nên sử dụng calloc.
Nguồn
2011-09-05 04:14:21
Trong khi điều này là tốt đẹp, và tôi đã biết về nó, nó không thực sự làm việc cho tôi vì tôi muốn UIBarButtonItem của tôi để duy trì các thuộc tính màu của thanh công cụ và ngay sau khi bạn giới thiệu một chế độ xem tùy chỉnh với UIButton cửa sổ AFAIK. Tất cả những gì tôi muốn làm là thay đổi màu chữ: ( –
câu trả lời tuyệt vời mà không cần sử dụng png. – andyPaul
Một cách thận trọng: điều này tạo ra một nút không hoạt động giống như nút - nó kích hoạt sự kiện của nó khi người dùng bắt đầu nhấn, thay vì khi chúng phát hành (tức là touchUpInside), thật không may là sự kiện UIControlEventTouchUpInside có vẻ bị nuốt bởi Cocoa, và thêm một mục tiêu vào nó trên một điều khiển phân đoạn không hoạt động. –