StretchBlt растровое изображение без перезаписи того, что уже нарисовано в месте назначения - PullRequest
0 голосов
/ 26 января 2019

У меня есть приложение для рисования, которое рисует много линий, многоугольников и т. Д. В контексте устройства.Я также рисую фоновые растровые изображения, которые поступают из внешнего источника и требуют много времени для загрузки.

При рисовании нового кадра я сначала запускаю потоки, которые загружают растровые изображения, затем рисую свои векторные данные, и наend хотел бы нарисовать загруженные растровые изображения при сохранении векторных данных.Мне нужны растровые изображения «под» векторными данными, но я не могу сначала нарисовать их, потому что они не загружены, и ожидание их загрузки сильно замедлит процесс.

Моя идея состояла в том, чтобы применитьТехника «Растровое изображение с прозрачностью»:

  1. Скопируйте часть контекста моего устройства, которая будет покрыта растровым изображением, в монохромное изображение, все объекты, нарисованные цветом фона, должны быть нарисованы, все остальное отключено.-limits.
  2. Скопировать изображение поверх растрового изображения (с соответствующим кодом ROP), чтобы отметить то, что должно быть прозрачным в растровом изображении
  3. StretchBlt измененного растрового изображения на контекст устройства

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

К сожалению, это не сработает на шаге 1, поскольку согласно документации StretchBlt:

Еслипреобразование источника имеет вращение или сдвиг, возникает ошибка.

Теперь я попытался установить обратное преобразование на моем монохромном DC, которое преобразовало бы мои сдвинутые данные в правильный прямоугольник, но функцияпо-прежнему происходит сбой.

Поэтому я предполагаю, что мой вопрос заключается в следующем: как растровое изображение растрескивается без удаления моих данных (функция, в которой я даю прозрачный цвет в пункте назначения , а не source , было бы идеально), ИЛИ Есть ли простой способ извлечь данные о цвете из контекста устройства, в котором есть вращение и сдвиговое преобразование?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...