2011-07-21 26 views
5

Tôi đã nhận thấy rằng tất cả mọi người làm việc với đối tượng Canvas nhân theo cách của họ xung quanh pixelbuffer bởi 4's (RGBA). Tôi đã làm việc rất nhiều với mã hóa pixel gốc (Delphi và C++) và nhận ra điều này như là một 32bit RGBA bình thường (mã hóa 888-8). Câu hỏi của tôi là: có cách nào để phát hiện pixelformat của trình duyệt không? Nếu bạn đang chạy trên một thiết bị hỗ trợ 16bit (565 mã hóa) hoặc 24bit (mã hóa 888), nó sẽ rất chậm nếu trình duyệt phải hạ cấp bitmap cho mỗi lần vẽ lại. Đặc biệt là khi pha trộn alpha có liên quan.Javascript Canvas pixelformat

Ngoài ra (và đây là thứ yếu): Có thể tạo một bitmap thuần 888 hoặc 565 ở tất cả dưới javascript không? Hoặc những gì về một bitmap 8bit dựa trên bitmap? Trò chơi dựa trên JS sẽ được hưởng lợi rất nhiều chỉ phải làm việc với 8 bit pixel trong quan điểm của tôi.

+0

Lưu ý rằng câu hỏi của tôi là: "có cách nào để phát hiện pixelformat của trình duyệt không?" –

Trả lời

3

Không. Không có cách nào để hạ cấp pixel của canvas, vì đó là những gì imageData chỉ đơn giản là như chính bản thân đặc tả.

Tất nhiên bạn có thể tạo một trò chơi javascript bằng cách sử dụng không có gì nhưng PNG 8 bit, sẽ tiết kiệm không gian và thời gian tải, nhưng không hiển thị thời gian.

+0

Tôi đoán câu hỏi có thể được xây dựng lại: Nếu tôi chạy mã của mình trong trình duyệt chỉ hỗ trợ đồ họa 16 bit (thiết bị di động, mặc dù hầu hết hỗ trợ 32 ngày này), dữ liệu pixel có định dạng 565 (từ) hoặc nó sẽ luôn ở trong định dạng RGB-A hiện tại? –

+0

Tôi tin rằng sau này. –

2

Không, không có cách nào để chỉ định không gian màu nào bạn muốn. Bất kỳ hacks thủ công xung quanh này sẽ chỉ làm chậm rendering hơn nữa. Theo kinh nghiệm của tôi, một số trình duyệt (Google Chrome) có thể hiển thị các trò chơi rất phức tạp và vẫn duy trì tốc độ khung hình cao.

0

Thực ra bạn đang trộn hai thực thể: không gian màu hình ảnh và không gian màu bề mặt. 5-6-5 là không gian màu bề mặt không có khái niệm minh bạch theo định nghĩa. Hình ảnh và <canvas> là đối tượng của hiển thị theo thứ tự z, do đó phải có alpha ở dạng này hoặc dạng khác.

Vì vậy, câu trả lời là 'không' bởi vì nó là trái với yêu cầu.

+0

565 chỉ đơn giản là phương pháp mã hóa, "codec" nếu bạn muốn. Tôi đã sử dụng các thuật ngữ này chỉ đơn giản là để gạch dưới phạm vi bit và phương tiện lưu trữ của mỗi pixel (trong trường hợp này là một từ 16 bit). Giải mã 15/16 bit pixel thành RGB rất đơn giản. Vấn đề là nếu có thể tăng tốc độ trên các thiết bị di động trong việc theo dõi dữ liệu pixel thô theo một cách khác. Nhưng tôi thực sự mong đợi trình duyệt giải mã dữ liệu pixel thành một mảng các giá trị RGB. Đối với việc hiển thị theo thứ tự Z, điều đó phải liên quan đến HLI và không phải là các kiểu dữ liệu. –

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