2014-04-02 3 views
1

나는 시간에 따라 변화하는 데이터를 모으는 프로그램을 가지고있다. Gtk3를 사용하여 C로 작성된 프로그램을 사용하여 실시간으로 데이터를 표시했습니다. "렌더링"기능에서 데이터는 화면 외부 표면에 그려지고 나중에 노출 이벤트에서 도면 영역 표면에 복사됩니다.표면을 움직이는 Gtk가 흐려짐

이것은 이전 렌더링 작업에서 표면을 유지하며, 오른쪽에서 새 데이터를 그리기 전에 이미지를 왼쪽으로 한 단계 씩 이동합니다. 그물 효과는 오른쪽 가장자리에 새 데이터가 나타나면서 왼쪽으로 스크롤되는 이미지 여야합니다.

필자의 시도는 새로운 서페이스를 만들고 이전 서페이스를 새로운 서페이스로 사용하고 시프트로 페인팅 한 다음 유사한 몇 가지 명령을 사용하여 원래대로 새 서페이스를 다시 그려 넣습니다 새 데이터를 추가하기 전에

다소 효과가 있지만 왼쪽으로 이동하면 이미지가 흐려지고 배경 흰색은 사라집니다.

날카 롭고 달성하려는 목표를 달성 할 수있는 방법이 있습니까?

나는 현재 GNU/Linux에서 개발하고 있지만 프로그램은 Windows에서도 빌드 및 실행됩니다.

제임스. width이 고르지

 

    //Cairo context for the existing surface. 
    cr = cairo_create (xy_surface); 

    //create a similar surface to the existing surface 
    cairo_surface_t *tmp_surf = cairo_surface_create_similar(xy_surface, 
     CAIRO_CONTENT_COLOR, width-2, height); 

    //create cairo context for the new surface 
    cairo_t *tmp_cr = cairo_create (tmp_surf); 

    source_x = ((gdouble)width * N_SAMPLES/sweep_rate) - 2; 
    dest_x = 0.0; 

    //Set the drawing source for the new surface to be the old surface 
    cairo_set_source_surface (tmp_cr, xy_surface, dest_x - source_x, 0.0); 
    cairo_rectangle (tmp_cr, dest_x, 0, width - 2 - source_x, height); 
    cairo_set_operator(tmp_cr, CAIRO_OPERATOR_SOURCE); 
    cairo_fill (tmp_cr); 
    cairo_destroy(tmp_cr); 

    //clear the existing surface 
    cairo_set_source_rgb(cr, 1, 1, 1); 
    cairo_paint(cr); 

    cairo_set_operator(cr, CAIRO_OPERATOR_ATOP); 
    cairo_set_source_surface(cr, tmp_surf, 0, 0); 
    cairo_paint(cr); 

    cairo_surface_destroy(tmp_surf); 

+0

왜 예를 들어 연산자 대신 ATOP를 사용하고 있습니까? SOURCE 또는 OVER? 투명성이 전혀 관련되어 있지 않습니까? (나는 ATOP가 어떤 alpha도없이 OVER와 같은 SOURCE와 같다고 생각한다.) –

+0

필사적이다. 나는 다른 것들을 많이 시도했다. 출처가 정확했습니다. xy_surface를 소스로 사용하기 전에 tmp_surf를 페인트해야했습니다. –

+0

더 명확하게하기 위해 스크린 샷을 추가하십시오. – unwind

답변

3

경우 잘 그린 부분적으로 당신의 표면의 픽셀 이웃의 색상에 따라 얻을 것이다 픽셀 왼쪽과 오른쪽 (검거, ROUNDDOWN)을 의미 표면의 기원에 대한 .5 값을 가져옵니다.

source_x에 10 진수가 없으면 사용하기 전에 rint (source_x)을 입력하기 만하면됩니다.

+0

아! 넌 보석이야. 고마워. –