f8g

ImageDataとgetPixel, setPixelの速度比較

比較項目

ImageData (all) 画像全体のImageDataオブジェクトをあらかじめ変数で持っておき、dataの内容だけを変更して最後に1回putImageData。
ImageData (1px) 1 * 1のImageDataオブジェクトを用意しておいて, 1pxごと処理 & putImageData。
Pixel getPixel、setPixelを使う。
Pixel (lock) getPixel、setPixel、lockCanvasUpdates、updateCanvasを使う。(この比較では、canvasを表示する前に処理をするため、Pixelとあんまり変わらなそう)

比較に使ったコードは、Dither法のを少し変えたもの。(画像は239*212)

結果

数値は大体の目安程度で。(単位ms)

Firefox
ImageData (all) 4000
ImageData (1px) 6500

やはり1pxずつよりは一気に変更した方が速い。1pxずつでも思ったより速い。

Opera
ImageData (all) 1800
ImageData (1px) 9000
Pixel 3000
Pixel (lock) 3000

ImageData使うのが一番速いという結果に。そのかわり、1pxずつのImageDataは凄い遅い。
あと、ページ上に表示されていない状態では、思ったとおりlock使っても変わらない。