有效编辑图像中的像素

sle*_*nja 0 c c++ optimization image image-processing

我有一个包含黑色(0)和白色(255)像素的8位图像(存储在数组中).假设我想将图像中的所有黑色像素更改为灰色(例如120)像素.什么是我可以将黑色变为灰色的最快方式.

我想到了两种方法 -

  1. 开始检查图像中的每个像素.一旦找到黑色像素,就将其更改为灰色.继续直到图像结束.(更慢但更容易)

  2. 开始检查像素.当发现黑色像素时,保持计数器以跟踪它.继续递增计数器直到下一个白色像素.然后转到计数器并使用像memset这样的快速函数将一组黑色像素更改为灰色.(不确定,但我认为这可能会更快)

我有一个巨大的1GB图像,因此方法1非常慢.是否有更好(更快)的方式来更改/编辑像素?

Dip*_*ick 6

可能更快一次一个字(使用单词对齐访问).

您可以使用0x78787878(假设32位)按位OR.这不会影响白色像素,但会将黑色像素设置为所需的值.