У меня есть приложение C#, но работа с картинкой выполняется в рамках проекта C++ (вот как это имеет).Как кэшировать изображение элемента управления?
Итак, я добавил в свое окно PictureBox
и передал ручку функции рисования. Он работает нормально.
Однако, когда элемент управления недействителен (я перемещаю окно за пределы экрана, а затем перемещаю его), я получаю в результате частично пустое окно. AFAIK для этого есть два подхода: перерисовка или кеширование изображения.
Перекрашивание может быть дорогостоящим процессом (изображение не меняется часто, но обработка занимает много времени, подумайте о 3D-рендерере), поэтому я хотел бы просто кэшировать изображение.
Если я правильно помню из старых дней программирования непосредственно с Win32 API, все, что требуется, это установить несколько флагов. Возможно ли это с помощью WinForms? Если да, то как?
Если вы хотите отобразить изображение в PictureBox, почему бы не установить его свойство Image вместо его рисования на его поверхности? Это будет сохраняться и на самом деле предназначено для Picturebox! Вы можете кэшировать suface в bmp с помощью PicteureBox.DrawToBitmap() .. – TaW
@TaW, потому что основная функция чертежа ничего не знает о WinForms. Это необработанный код Win32, который работает с ручками (HWND). – greenoldman
Жаль, что я ошибся, а не об общей идее, но о том, как ее достичь. Поскольку пиксели сидят на поверхности, вы не можете их захватить с помощью DrawToBitmap. Вам нужно использовать 'CopyFromScreen', чтобы захватить только нужную область, а затем установить растровое изображение rsulting как изображение PB. – TaW