Реализация выделения полупрозрачным прямоугольником
Какие вы можете предложить способы реализации полупрозрачного прямоугольника выделения? (примерно как в Eplorer WinXP) (DrawFocusRect - не предлагать - т.к. это только рамка).
У меня вся графика на GDI+, а алгоритм примерно такой:
1.Кликаем: запомнили фоновую картинку.
2.Тянем мышь: при растяжении(прямоугольник увеличивается) - дорисовуем прямоугольник там где его не хватает до текущих координат указателя, при сжатии(прямоугольник уменьшается)- рисуем часть фоновой картинки там, где ее не хватает.
3.Отпускаем: - отрисовуем всю фоновую картинку.
Недостатки: хранение фоновой картинки(особенно если она большая) требует много памяти.
Для hardcase:
В GPImage я запоминал фоновую картинку имэджа с помощью потоков. Как ты правильно заметил, операции с ними требуют много времени и памяти. Получается, что как мы кликаем на Image, занимаемая память увеличивается в разы. Как отпускаем - освобождается до исходной.
Цитата:
Originally posted by hardcase
Мне так, кажется, лучше сразу рисовать изображение в TGPImage - это будет быстрее, чем потом конвертить их тудым-сюдым.
Мне так, кажется, лучше сразу рисовать изображение в TGPImage - это будет быстрее, чем потом конвертить их тудым-сюдым.
Сделал как ты говоришь. В общем не буду много писать, выкладываю исходники:
TSelection.rar - запоминание с пом. стримов
TSelection(Memory).rar - изображение сразу рисуется в TGPImage
там в ридми все расписано.
Может как-то можно сделать, чтоб не запоминать всю фоновую картинку? Буду благодарен за любые идеи и предложения.
P.S. Может кому пригодится - качайте наздоровье, используйте где хотите.
P.S. для работы - нужна gdiplus.dll (входит в состав WinXP). У кого Win9x и нет gdiplus.dll - скорее всего пахать не будет.