0

編集済み:以前の回答とヘルプをありがとう! この質問を正確に必要なものに編集することにしました。以前ほど具体的でなくて申し訳ありません。

基本的にタイトルはすべての情報です。これは現在私が取り組んでいるものです:

int channels = 4;
int length = width * height;
int[] data = new int[length * channels];
int[][] channelPixels = new int[4][length];

for (int c = 0; c < channels; c++) {
    for (int i = 0; i < length; i++) {
        channelPixels[c][i] = readByte();
    }
}

残念ながら、色はオリジナルと一致していないようです。

ここで私が間違っていることはありますか?

4

3 に答える 3

3

Cardinalは符号なし整数でTypename(value)、型キャストの Delphi 構文です。(C 構文で同等のものは です(typename) value。)Cardinal()は関数ではなく、ポインタを符号なし整数としてキャストしています。

数人がすでに指摘しているように、この^演算子はポインター逆参照演算子です。 は、「指している値と等しいdp^ := sp^値を指す値を設定する」ことを意味します。dpsp

ここで使用されているようなポインターとポインターのインクリメントは、Java には存在しないため、作業が非常に複雑になります。マネージ コードでこれを行う場合に必要なことは、配列に関して全体を書き直すことです。

于 2012-08-15T23:43:55.790 に答える
1

このコードは、長方形のバッファーを反転し、RGBAバイトオーダーをBGRAに(またはその逆に)次のように変更します。

a b c d e f g h
i j k l m n o p
=>
k j i l o n m p
c b a d g f e h

c / javaのような擬似コードを使用した大まかなアナログ:

src = array of byte with length (RawHdr.Width * RawHdr.Height * 4)
dst = array of byte with the same length

dstindex = 0

for (i = RawHdr.Height - 1; i >= 0; i--)
    {
     srcstartindex = i * RawHdr.Width * 4;
     for (j = 0; j < RawHdr.Width; j++)
         {  
           si = srcstartindex + j * 4;
           dst[dstindex] = src[si + 2];
           dst[dstindex + 1] = src[si + 1];
           dst[dstindex + 2] = src[si];
           dst[dstindex + 3] = src[si + 3];
           dstindex +=4;
         }
     } 
于 2012-08-16T05:47:41.550 に答える
0

私はあなたのためにあなたのコードを書くつもりはありませんが、これらはあなたを助けるはずです:

Google の最初のリンクからのCardinalは、サイズが保証されていない基本的な符号なし整数型です。

^ポインター逆参照です。

于 2012-08-15T22:53:33.757 に答える