StretchRectangle на поверхности от одного устройства к другому - PullRequest
1 голос
/ 24 марта 2011

Можно ли использовать StretchRectangle () , чтобы нарисовать поверхность, созданную на одном устройстве, на поверхность, созданную на другом устройстве?Это два устройства, созданные для двух разных элементов управления.

Я продолжаю получать InvalidCallException.Обе поверхности являются объектами рендеринга, имеют одинаковый формат и помещаются в пул по умолчанию.

Полагаю, проблема заключается в двух разных устройствах?Как я могу скопировать эту поверхность?

ОБНОВЛЕНИЕ:

У меня есть некоторые успехи с использованием LockRectangle и использованием GraphicsStream для чтенияи написать на другую поверхность.Я говорю некоторый успех, так как я замечаю что-то движущееся видно, но мне все еще нужно определить, сколько байтов для чтения / записи и так далее, какой прямоугольник ...

1 Ответ

0 голосов
/ 24 марта 2011

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

byte[] data = new byte[surfaceByteCount];
GraphicsStream sourceStream = sourceSurface.LockRectangle(area, LockFlags.ReadOnly);
sourceStream.Read(data, 0, data.Length);
sourceSurface.UnlockRectangle();

GraphicsStream targetStream = targetSurface.LockRectangle(area, LockFlags.Discard);
targetStream.Write(data, 0, data.Length);
targetSurface.UnlockRectangle();

device.Present();
...