Im разрабатывает приложение для совместного использования экрана, которое постоянно запускает цикл и получает небольшие кадры из сокета. Затем следующий шаг - нарисовать их в кадре. Конечно, я использую thread, потому что я не хочу замораживать ui.Рисовать напрямую на PictureBox
Это мой код:
Bitmap frame = byteArrayToImage(buff) as Bitmap;//a praticular bitmap im getting from a socket.
Bitmap current = (Bitmap)pictureBox1.Image;
var graphics = Graphics.FromImage(current);
graphics.DrawImage(frame, left, top);//left and top are two int variables of course.
pictureBox1.Image = current;
Но теперь им получаю сообщение об ошибке:
Object is already in use elsewhere.
в этой линии var graphics = Graphics.FromImage(current);
пытался Clone
его, создать New Bitmap(current)
.. до сих пор нет sucess ..
Вы можете создать графический контекст из изображения, это не имеет прямой ссылки на ваш образ больше внутри рамки, это просто новая версия изображения. После этого вы должны снова установить изображение в окно с изображениями. – Icepickle
Фактически вы манипулируете самим экземпляром изображения, которое также имеет «pictureBox1» (или что вы подразумеваете под «прямой ссылкой», Icepickle?). Единственная проблема заключается в том, что 'pictureBox1' просто не знает об изменениях, внесенных вами в его' Image', поэтому он не перерисовывает себя. Попробуйте называть 'pictureBox1.Refresh()' или 'pictureBox1.Invalidate()' (следуя предложению Icepickle: 'pictureBox1.Image = pictureBox1.Image;' должен работать также - решите для себя) – olydis
Huh? ... Я согласен с olydis. Просто обновите свой графический ящик, и он должен обновиться! –