Автоматическая прокрутка или сдвиг растрового изображения в .NET - PullRequest
0 голосов
/ 26 августа 2009

У меня есть растровый объект .NET GDI + (или, если это облегчает проблему с растровым объектом WPF), и я хочу сместить всю партию на dx, dy (целые пиксели), и в идеале я хотел бы сделать он использует .NET, но вызовы API в порядке. Он должен быть эффективным, потому что его будут называть 10000 раз, скажем, с умеренно большими растровыми изображениями.

Я реализовал решение с использованием DrawImage - но оно медленное и оно останавливает приложение на несколько минут, пока ГХ очищает временные объекты, которые были использованы.

Я также начал работать над версией, использующей ScrollDC, но пока мне не повезло заставить ее работать на DC растрового изображения (я могу заставить его работать, создавая растровое изображение API с дескриптором растрового изображения, затем создавая совместимый DC asnd вызывает ScrollDC, но затем я должен вернуть его обратно в растровый объект).

Должен быть способ «сдвинуть с места» для сдвига растрового изображения. MikeJ

Ответы [ 4 ]

0 голосов
/ 03 сентября 2009

Я записал свое решение проблемы на Прокрутка растрового изображения , но я все еще не уверен, что нет лучшего способа и можно ли было бы сделать это лучше, скажем, WPF?

0 голосов
/ 26 августа 2009

Вы просто хотите переместить всю графику? DrawImage имеет параметры x, y, чтобы сделать это. Я, наверное, неправильно понимаю ваш вопрос.

Кроме того, GDI не будет эффективным периодом, когда вы работаете с 10 000 изображений. Если вам нужна производительность, близкая к производительности в реальном времени, вам придется либо переделать свой алгоритм, либо заглянуть в 3D API (например, DirectX или OpenGL) или, возможно, и в другое.

0 голосов
/ 01 сентября 2009

Извините, если мой вопрос не был слишком ясен. Все, что я пытаюсь сделать, это прокрутить растровое изображение на месте, т.е. выполнить операцию сдвига. Например, такой метод, как Scroll (B, 1,0), сдвинет всю битовую карту B на один пиксель вправо.

У меня есть разумное решение с использованием вызовов DrawImage и API ScrollWindowEx, что примерно в 10 раз быстрее.

Я все еще пытаюсь понять, как я могу сделать что-то быстрее, используя WPF.

0 голосов
/ 26 августа 2009

Вы нашли метод Graphics.FromImage? Это позволит вам напрямую манипулировать растровым изображением. Я не уверен, что вы используете с DrawImage, но Graphics.DrawImage должен позволить вам скопировать область растрового изображения на себя (и применить сдвиг в процессе).

В качестве альтернативы, для объекта Graphics можно использовать Graphics.GetHdc, ScrollDC и Graphics.ReleaseHdc.

...