我有自定义图像格式的原始数据(可以更改),它以列主要顺序存储(在一些二进制标题数据之后)。我将文件读入名为“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>
我该怎么办?我错过了某处字节[]的变换吗?当中心设置为0.5时,为什么RotateTransform会移动图像?
请注意,这必须尽可能快,它显然是一个大图像,我试图以10Hz +渲染,这就是为什么nise for-loop Byte数组转换被排除在可能的范围之外。
一如既往地谢谢
〜TMII
答案 0 :(得分: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。 您只需在图像更改时执行此操作。