1

ビットマップ内のピクセルをより速く変更できるように作成しているコントロールで次のサブを使用しています。

    Protected Sub LockForMemory()
        idata = ime.LockBits(New Rectangle(0, 0, ime.Width, ime.Height), ImageLockMode.WriteOnly, ime.PixelFormat)
        ipoint = idata.Scan0

        ibytes = Math.Abs(idata.Stride) * ime.Height
        ReDim irgbvalues(ibytes - 1)
        System.Runtime.InteropServices.Marshal.Copy(ipoint, irgbvalues, 0, ibytes)
    End Sub

これらはすべて機能し、後で操作後に実際の画像を取得するときにも正常に機能します。問題は、それらの実際のピクセルを設定することです。

この配列は何ですか?私はそれが満たされていることを知っていIntegersますが、それぞれの指標は何を表していますか? 最初は、次のように設定されていると思いました。

配列 -> [ピクセル 0,0 の R][ピクセル 0,0 の G][ピクセル 0,0 の B][ピクセル 2,0 の R][ピクセル 2,0 の G][ピクセル 2,0 の B] ]

ただし、これは正しく機能していないようです。

4

1 に答える 1

1

ime.PixelFormat の値に依存します。各ピクセルは、RGB、ARGB、パレット ルックアップ インデックスなどで表すことができます。

http://msdn.microsoft.com/en-us/library/system.drawing.imaging.pixelformat.aspx

また、バイトオーダーにも注意が必要です。バイトはリトル エンディアンのバイト順である可能性がありますが、ターゲット プラットフォームによって異なります。

Format32bppArgb の場合、これによりフォーマットが明らかになる可能性があります。

PixelFormat.Format32bppArgb のバイト順が間違っているようです

于 2012-05-31T19:01:13.070 に答える