기본적으로 기하학적 모양을 여러 개의 작은 삼각형 ("왼쪽 캔버스")으로 자르고, 삼각형의 무리에 간단한 수학적 변환을 적용하고, 다시 그리는 프로그램을 설계했습니다. 그들의 새로운 구성. 아래 화면 캡처를 참조하십시오. 이 삼각형을 그릴하기 위해Qt/C++ : 효율적으로 그리기
, 나는 QPainter::drawPolygon
를 사용합니다. 오른쪽의 각 삼각형은 왼쪽의 삼각형에 해당하므로 어떤 색으로 그려야하는지 알 수 있습니다.
지금까지는 문제가 없습니다. 이보다 더 많은 삼각형을 그릴지라도 (모양을 자르기 위해 훨씬 작은 삼각형을 사용할 때), 이것은 충분히 빠릅니다.
내 프로그램에 기능을 추가했습니다. 일반 삼각형 대신 그림에서 추출한 삼각형을 그릴 수 있습니다. 다음 화면 캡처를 참조하십시오.
문제는 내가이 작업을 수행하는 방식이 너무 느린 것입니다. 여기에 내가 그것을 할 방법은 다음과 같습니다
나는 모든 삼각형 각 삼각형- , 내가 표시됩니다 각 픽셀의 좌표를 계산한다.
- 이 픽셀들 각각에 대해 그림에서 해당 픽셀의 좌표를 계산합니다 (이것은 쉬운 수학적 연산입니다). 그리고 그 픽셀의 색을 검색합니다.
- 픽셀을 그리는 데
QPainter::setPen(QColor)
및QPainter::drawPoint(QPoint)
을 사용합니다.
나는 Qt는 프로그래밍에 새로운 오전 나는 그래픽에 대해 아무것도 몰라, 그래서 이것은 내가 가지고 올 수있는 것입니다. 문제는 "받아 들일 수 없을 정도로"너무 느리다는 것입니다 (각 캔버스의 paintEvent
은 0.15 초, 일반 삼각형의 경우 0.01 초).
, 나는 캔버스 위젯의 paintEvent
, 시간의
- 58 %의 시간
QPainter::drawPoint
- 27 %에 소요되는이 소요되는에 나타났습니다 in
QPainter::setPen
QPainter::drawPoint
은 너무 복잡하고 느린 것 같습니다. 나는 단지 주어진 색상의 픽셀을 인쇄하기를 원합니다.
내 문제에 대한 해결책을 찾았을 수도 있습니다. 내 캔버스에 표시하려는 모든 것을 나타내는 QImage
(내 캔버스 위젯의 멤버 변수로)을 저장하고 내 paintEvent
픽셀로 완전히 정의합니다. 내 paintEvent
의 끝에 즉시 QPainter::drawImage
으로 그립니다. 나는 이것이 훨씬 더 빠를 것이라는 암시를 가지고있다. 하지만 코드를 다시 작성하기 전에 이것이 내가 정말로하고 싶은 것인지를 알고 싶습니다.
나는 당신이 죽음을 지루하게하지 않았기를 희망합니다! 당신의 통찰에 미리 감사드립니다.
픽셀 단위로 그림을 그리는 중 ?? (zomg !!) – UmNyobe