Отразить растровое изображение в .NET Compact Framework

У меня есть Bitmap объект, который мне нужно иногда переворачивать по горизонтали, иногда по вертикали, иногда и то, и другое. В полной структуре есть метод Image.RotateFlip(), который мне и нужен. К сожалению, как и большинство полезных функций в полной платформе, этот метод не существует в компактной платформе. Есть простой способ сделать это? Лучшее, что я смог найти, это this, но он использует небезопасный код, который я ' Я бы хотел избежать, и он мог только вращать, а не переворачивать.

Изменить: Хорошо, я нашел способ сделать некоторые оптимизации, когда мне нужно только сделать вертикальный переворот.


person Jason    schedule 13.08.2009    source источник
comment
Джейсон, эта же ссылка использует безопасный метод поворота. В нем говорится, что для полного поворота на 90 градусов изображения 800x600 пикселей потребовалось почти 3 минуты, что мне кажется слишком длинным. Я бы попробовал его на вашем устройстве, чтобы увидеть, как он работает, и, возможно, поищу горлышко бутылки. По моему опыту, методы получения и установки пикселей довольно быстрые. Кроме того, это всего лишь крошечный шаг в логике от вращения до переворачивания ...   -  person Paul Sasik    schedule 13.08.2009
comment
Зачем избегать небезопасного кода? Это быстро, работает и полностью законно на языке.   -  person ctacke    schedule 13.08.2009


Ответы (2)


CF не поддерживает это, но если ваше устройство поддерживает библиотеку изображений, вы можете использовать P / Invoke до IBasicBitmapOps :: Flip. В SDF это уже заключено в Класс OpenNETCF.Drawing.Imaging.ImageUtils.

person ctacke    schedule 13.08.2009
comment
Это то, что я искал. Я уже реализовал это сам, используя небезопасные манипуляции с указателями, но это, вероятно, более безопасный способ. - person Jason; 13.08.2009

Я недавно прочитал об этом статью. Я не пробовал, потому что мне нужны другие вращения, кроме 90/180/270, но он утверждает, что это быстрый способ поворота.

http://www.codeproject.com/KB/graphics/ImageRotationForCF.aspx

[править] блин, я не правильно прочитал, вы уже нашли это .. извините.

person Jeroen Pot    schedule 29.08.2009