2010-06-17 7 views
1

인사말 모든 QT- QImage 및 멀티 스레딩 문제

가에서 이미지를 참조하십시오 : 우리는 전자 현미경에서 MRC 이미지에서 셀 가장자리를 추출 할 수있는 응용 프로그램을 개발하는 http://i48.tinypic.com/316qb78.jpg

.

MRC 파일 형식은 체적 픽셀 데이터 (http://en.wikipedia.org/wiki/Voxel)를 저장하며 MRC 파일에서 데이터 (회색조 값)를로드하고 저장하기 위해 3D 문자 배열 (char ***)을 사용합니다.

이미지에서 알 수 있듯이 각각 XY 평면을 표시하는 뷰어가 3 명 있습니다. 뷰어 상단의 스크롤 막대를 사용하여 축을 따라 이미지 조각을 변경합니다.

사용자가 스크롤 막대 위치를 변경할 때 수행하는 단계는 다음과 같습니다.

1) 새로운 스크롤 치를 취득 (이 선택된 슬라이스)합니다 (relavant 평면)) ZX YZ, XY 또는

2 (숯 * 슬라이스를 생성하며.) 어레이를위한 된 3D 문자를 배열을 읽고 (CHAR ***)

3) 새로운 QImage * (Format_RGB888 작성)을 설정하고, 화소에 의해 선택된 슬라이스 img->와 setPixel (X를 사용 ('슬라이스'를 판독함으로써 값 , y, c);)

4)이 새로운 QImage *는 paintEvent() 메서드로 그려집니다.

가이 프로세스는 우리가 위에 검출 곡선 (화소의 집합)을 그리는 QImage 위 *해야 집중 process.During 때문에, 우리는 별도의 스레드에 "에지 검출"처리를 실행하려고

. (이는 QT 스레드 외부에서 drawPoint() 메서드를 호출해야 함을 의미합니다.

QImage를 사용하는 것이 가장 좋은 방법입니까?

다른 스레드에서 QT 드로잉 메서드를 실행하는 가장 좋은 방법은 무엇입니까? 사전에

감사, QImage의 문서에서

답변

4

은 :

QImageQPaintDevice 서브 클래스이기 때문에, QPainter는 이미지에 직접 그리는 데 사용 할 수 있습니다. QImage에서 QPainter을 사용할 때 현재 GUI 스레드가 아닌 다른 스레드에서 페인팅을 수행 할 수 있습니다.

이미지에 QPainter을 만들고 필요한 것을 그려보세요.

+0

그러나 이미지를 화면에 그릴 때 이미지의 현재 상태 만 가져옵니다. 이미지를 더 칠하면 화면에 표시된 내용이 변경되지 않습니다. 이미지를 보여주는 위젯. 운 좋게도 신호/슬롯 또는 타이머로이를 쉽게 해결할 수 있습니다. –