WorkingWithImages
あらゆる画像は、pitchを与えられます。pitchは、基本的に、"1ラインの長さ"として説明されうるものです。おかしいのは、pitchは画像の幅と等しくなくてもよいということです。
たとえば、画像をいくらかクロップ(Crop)する場合、変わるのは画像の幅だけです。pitchとラインの実バイト数は、同じままです。
そのとき、画像は、このようにレイアウトされます:
rrrrrrrrrrrrrrrrpppp rrrrrrrrrrrrrrrrpppp rrrrrrrrrrrrrrrrpppp
'r'が使われた画像内の画素であるとすると、'p'は各ラインの後に挿入されたパディング*1です。
簡潔な情報(Fast Information) †
Width = ピクセル単位での幅。
Rowsize = 1ラインのバイト数。
Pitch = 1ラインの最初から次までのバイト単位での距離。
vi->BytesFromPixels(n) = バイト単位でのnピクセルのサイズ - pitchを考慮しないので、1ライン以内でのみ使用される。
PlanarImageFormat 用:
Aligned rowsize = バイト単位での幅。つねに8で割り切れる。
VideoInfo vs. PVideoFrame †
VideoInfoは、"不変(constant)な"ビデオ情報であると考えられます。これは、どんな方法でも、変わることができません。幅、高さや色空間といった情報は、変わることができません。そのため、あなたがこれから得る情報は、あなたが受け取るすべてのフレームからのものと同じであると信頼されます。あなたが受け取ったVideoInfoを変更するとしても、それが、あなたが受け取るフレームを変えることはないでしょう。しかし、修正された'VideoInfo vi'はenv->NewVideoFrame(vi)に送ることができ、変更されたパラメータを伴う新しいフレームが生成されるでしょう。あなた自身のフィルタだけが、あなたのフィルタに与えられたVideoInfoを修正することができます。
PVideoFrameは、あなたがリクエストした特定のフレームについての情報を含みます。高さ(Height)やRowsizeは変わるべきではありません(これはバグと考えられます)。Pitchは変わります。そのため、あなたが受け取るすべてのフレームに関して、pitchが同じであることを当てにすることはできません。
さらなる情報 †
DataStorageInAviSynthについて、もっと多くのことを見てください。
ColorSpacesについて、もっと多くのことを見てください。
註: このページは、http://www.avisynth.nl/WorkingWithImagesの日本語訳です。