0

私はカスタム画像形式(変更できない)の生データを持っており、それは列の主要な順序で(いくつかのバイナリヘッダーデータの後に)保存されています。ファイルを「imageDataBytes」というByte[]に読み込みました。

int XSize = 1280; // Really the height of the image
int YSize = 2048; // Really the width of the image
WriteableBitMap myImage = new WritableBitmap(XSize, YSize, 96, 96, PixelFormats.Gray16, null)
System.Windows.Int32Rect rect = new System.Windows.Int32Rect(0, 0, XSize , YSize);
myImage.WritePixels(rect, customImage.imageDataBytes, stride, customImage.imageOffset);

今、私はこれをXAMLで表示します

    <Image Grid.Column="0" Grid.Row="1" Cursor="Cursor1.cur"Source="{Binding myImage}" Stretch="None"/>

画像を回転させる必要があります(バイトストリームの列の主要な順序を修正するためですが、C#のIPPに似たByte []の配列変換が見つかりません(ここではIPPを利用できません)。 xamlからの画像の回転は、(中心を中心に回転するのではなく)画像をあちこちに移動します。

<Image ... // From above>
    <Image.RenderTransform>
        <RotateTransform CenterX="0.5" CenterY="0.5" Angle="-90"/>
    </Image.RenderTransform>
</Image>

私に何ができる?byte []の変換がどこかにありませんか?中心が0.5に設定されているのに、RotateTransformが画像を移動するのはなぜですか?

これは可能な限り高速である必要があることに注意してください。これは明らかに大きな画像であり、10Hz以上でレンダリングしようとしています。これが、nieveforループバイト配列変換が可能な領域から除外される理由です。

いつもありがとう

〜TMII

4

1 に答える 1

2

これは、オブジェクトの中心を中心に回転しているのではなく、点(0.5、0.5)を中心に回転しているためです。http://msdn.microsoft.com/en-us/library/system.windows.media.rotatetransform.centerx.aspxを参照してください

コードビハインドの画像にアクセスできる場合は、RenderTransformを手動で設定し、CenterXとCenterYをImage.Width/2.0およびImage.Height/2.0として指定します。これは、画像が変更されたときにのみ行う必要があります。

于 2012-05-26T15:12:55.913 に答える