0

我有以列主要顺序存储的自定义图像格式(无法更改)的原始数据(在一些二进制标题数据之后)。我将文件读入一个名为“imageDataBytes”的字节[]。

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+ 的频率进行渲染,这就是为什么 nieve for-loop 字节数组转换被排除在可能的范围之外的原因。

一如既往的感谢

~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 回答