Как сделать очень большое изображение или документ, нарисованный без проблем с производительностью - PullRequest
0 голосов
/ 29 марта 2012

Я хочу создать элемент управления, который действует как линейка времени с формой волны для звуковых WAV-файлов, например, в Movie Maker или в редакторе видео Camtasia Studio.Звуковой файл WAV

У меня есть метод, чтобы нарисовать волну определенного периода времени

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

Ответы [ 2 ]

1 голос
/ 29 марта 2012

Мы не знаем, как вы визуализируете свою графику, но я предполагаю, что вы используете небезопасные блокировочные биты для генерации непосредственно в растровое изображение.Как говорит Мачей, просто визуализируйте ту часть, которую вам нужно отобразить - при увеличении масштабируйте или снова визуализируйте (должен быть быстрым).Вы можете сделать упреждающий эффект путем рендеринга текущего, увеличения 1, уменьшения 1, левого 1/2 экрана, правого 1/2 экрана и т. Д. В фоновом режиме, но затем вам нужно управлять этим (они могут отображаться параллельно, конечно, с использованием фонарабочие темы).Ключ к памяти заключается в том, чтобы свести к минимуму растровые изображения (у вас есть алгоритм графика и средства визуализации), а ключ к скорости - в том, чтобы поддерживать низкий уровень и предварительно выбирать то, что вы можете, и параллелизм.

1 голос
/ 29 марта 2012

Если вы имеете дело с большим изображением и большим количеством данных, я бы предложил следующее:

  • отрисовка / отображение того, на что смотрит пользователь в данный момент
  • отрисовка остальной части, если вфоновый поток в изображение памяти

После того, как все изображение будет отображено на изображении, сохраненном в памяти, любая прокрутка и / или масштабирование будут просто размещать окно отображения.

Рендеринг вашего изображения в увеличенном масштабе в растровое изображение.Когда вам нужно отобразить часть if, используйте Bitmap.Clone, чтобы скопировать часть этого растрового изображения в изображение, отображаемое для пользователя.Немного трудной частью будет визуализация части вашего базового растрового изображения, которое в данный момент требуется для просмотра.

Это может потребовать памяти.Это эффективный механизм кэширования, и, как всегда, в таких случаях вы получаете скорость, используя больше памяти.

Что-то похожее на работу карт Google.

...