JavaScript画布像素格式

5
我注意到使用Canvas对象的所有人都会将像素缓冲区乘以4(即RGBA)。我曾经大量使用本地像素编码(Delphi和C ++),并将其识别为正常的32位RGBA(888-8编码)。我的问题是:有没有一种方法可以检测浏览器的像素格式?如果您运行在支持16位(565编码)或24位(888编码)的设备上,如果浏览器必须将每个重绘的位图降级,则速度会非常慢。特别是涉及Alpha混合时。
此外(这是次要的):在JavaScript下是否可能创建纯888或565位图?或者基于8位调色板的位图呢?在我看来,JS游戏只需要处理8位像素就能大大受益。

请注意,我的问题是:“有没有一种方法可以检测浏览器的像素格式?” - Jon Lennart Aasenden
3个回答

3

不行。就规范本身而言,似乎没有降低画布像素的方法,因为这就是imageData所代表的内容。

当然,你可以使用仅由8位PNG组成的JavaScript游戏,这将节省空间和加载时间,但不会节省渲染时间。


我想问题可以重新表述一下:如果我在仅支持16位图形的浏览器(移动设备,尽管大多数现在支持32位)上运行我的代码,像素数据会以565格式(字)还是始终以其目前的RGB-A格式存在? - Jon Lennart Aasenden

2

不,没有办法指定你想要的颜色空间。任何手动的黑科技都只会进一步减慢渲染速度。根据我的经验,一些浏览器(例如Google Chrome)可以渲染非常复杂的游戏并仍然保持高帧率。


0

实际上,您混淆了两个实体:图像颜色空间和表面颜色空间。 5-6-5是表面颜色空间,根据定义没有透明度的概念。 图像和<canvas>是z-order渲染的主题,因此必须以一种形式具有alpha通道。

因此,答案是否定的,因为这违反了要求。


565 只是编码方式,如果您愿意可以称其为“编解码器”。我使用这些术语只是为了强调每个像素的位范围和存储介质(在这种情况下是一个 16 位单词)。将 15/16 位像素解码为 RGB 非常简单。我的意思是是否有另一种方式在移动设备上获取原始像素数据来提高速度。但是我实际上希望浏览器将像素数据解码为 RGB 值数组。至于 Z-顺序渲染,那与数据类型无关,跟硬件接口有关。 - Jon Lennart Aasenden

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接