Привет всем,
См. Изображение по адресу: http://i48.tinypic.com/316qb78.jpg
Мы разрабатываем приложение для извлечения краев клеток из изображений MRC с электронного микроскопа.
В формате файла MRC хранятся объемные пиксельные данные (http://en.wikipedia.org/wiki/Voxel), и мы просто используем массив 3D char (char ***) для загрузки и хранения данных (значений шкалы серого) из файла MRC.
Как показано на изображении, есть 3 средства просмотра для отображения плоскостей XY, YZ и ZX соответственно. Полосы прокрутки в верхней части средств просмотра используются для изменения среза изображения по оси.
Вот шаги, которые мы делаем, когда пользователь меняет положение полосы прокрутки.
1) получить новое значение полосы прокрутки. (Это выбранный фрагмент)
2) для соответствующей плоскости (YZ, XY или ZX) сгенерируйте массив (char * slice;) для выбранного среза, прочитав массив 3D char (char ***)
3) Создайте новый QImage * (Format_RGB888) и установите значения пикселей, прочитав 'slice' (используя img-> setPixel (x, y, c);)
4) Этот новый QImage * отрисовывается в методе paintEvent ().
Мы собираемся выполнить процесс "обнаружения края" в отдельном потоке, поскольку это интенсивный процесс. Во время этого процесса нам нужно нарисовать обнаруженную кривую (набор пикселей) поверх QImage *. (Как слой). Это означает, что нам нужно вызвать методы drawPoint () вне потока QT.
Это лучший способ использовать QImage в этом случае?
Как лучше всего выполнять методы рисования QT из другого потока?
заранее спасибо,