2012-05-26 5 views
0

У меня есть необработанные данные в формате пользовательского изображения (canot be changed), который хранится в главном порядке столбца (после некоторых двоичных данных заголовка). Я прочитал файл в байт [], названный «imageDataBytes».WPF WritableBitmap с вращением (от столбца Major до RowMajor)

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"/> 

Мне нужно, чтобы получить изображение поворачивается (для коррекции колонки основного порядка в потоковом, но я не могу найти преобразование массива для Byte [] похож на НПЭ в C# (и у меня нет IPP здесь). и поворот изображения из XAML перемещает изображение повсюду (а не вращается вокруг центра).

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

Что n Я делаю? Я пропускаю преобразования в байте [] где-то? Почему RotateTransform перемещает изображение, когда центр установлен на 0,5?

Обратите внимание, что это должно быть как можно быстрее, это явно большое изображение, и я пытаюсь отобразить его на частоте 10 Гц +, поэтому исключение из массива байтов для цикла исключается из области возможного.

Спасибо, как всегда

~ TMII

ответ

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. Вам нужно сделать это только при изменении изображения.

+0

Это была комбинация этого и моей собственной глупости. Я перепутал CenterX/CenterY с RenderTransformOrigin, и я указал, что изображение намного больше, чем машина, в которой я сейчас работаю над поддержкой. – Toymakerii

Смежные вопросы