2017-05-07 7 views
1
나는 캔버스를 만든

에서 이미지를 얻을 TclTk. 캔버스 안에는 텍스트와 직사각형이 색으로 채워져 있습니다. 내가 사용하는 캔버스에서 올바른 EPS 파일을 생성 할 수 있습니다

$can postscript -colormode color -file test.eps 

을 그러나 내가 이미지를 얻을 후 사용하여 PNG/BMP/TIFF/JPEG 이미지 파일을 저장할 수하기 위해 ::canvas::snap $can를 사용하려고하는 경우

  1. 는이 문제를 해결하는 방법 내가 사용할 수 있는가 :: 캔버스 :: 스냅 :
    Window ".graphresults1494146100.sw.sf.frame.c" cannot be transformed into a pixmap (possibly obscured?) 
    Window ".graphresults1494146100.sw.sf.frame.c" cannot be transformed into a pixmap (possibly obscured?) 
        while executing 
        "image create photo -data $can" 
         (procedure "::mTKs::savegraphres" line 3) 
         invoked from within 
        "::mTKs::savegraphres .graphresults1494146100.sw.sf.frame.c" 
         (menu invoke) 
    

    그래서 질문은 다음과 같습니다 IMG 패키지 나는 다음과 같은 오류가 발생합니다 d 다음 Img를 사용하여 이미지 파일을 생성 하시겠습니까?

  2. 그렇다면 TclTk 코드 만 사용하여 eps 파일을 이미지 파일로 변환 할 수있는 방법이 있습니까? 이 목적을 위해 Ghostscript 나 ImageMagic을 사용할 수는 있지만 프로그램에 TclTk 만 사용하고 싶습니다.

  3. 캔버스에서 이미지를 가져 오는 다른 방법 ??

그냥 경우 : 내가 OS 10.12.4 TclTk 8.6 IMG 1.4.6 Tklib 0.6 BWidget 1.9.10

새로운 사실 ​​

를 사용하고 그 문제는 OS와 것을 발견 X 버전. 제 작품에서 저는 10.10.4를 사용하고 있습니다. 코드는 그림을 만들 수 있지만 그림을 만든 후에는 캔버스 내용이 완전히 흰색이됩니다. 캔버스 :: 스냅을 사용하면 창 안쪽에 스태킹 순서가 바뀌어 명백한 빈 캔버스가 생깁니다. 맞습니까?

또한 Donal Fellows의 조언을 받아서 .toplevelwindow.canvas에서 직접 캔버스를 만들고 10.10.4 canvas :: snap과 Img는 올바른 이미지를 생성하고 창 내용은 변경되지 않습니다. 10.12.4를 사용하여 이전과 같은 오류가 발생했습니다. 이 문제를 해결하려면?

답변

0

Img 패키지의 일부로 지원되는 메커니즘 (사용자를 구별하기 위해 tkimg라고도 함)을 사용하고 있습니다. 오류 메시지가 있었다 :

Window ".graphresults1494146100.sw.sf.frame.c" cannot be transformed into a pixmap (possibly obscured?)

문제는 (즉, 그것은 동일한 기본 API 모든 스크린 샷 메커니즘의 이미지를 캔버스의 변환이 캔버스의 화면 잡아를 수행하여 수행되는 것입니다 사용), 실패한 것으로 보입니다. 실패의 가장 큰 이유는 포착이 완료된 시점에 화면에 캔버스가 표시되지 않았기 때문입니다. 캡처가 작동하려면 화면 상단에 이 있어야합니다.

캔버스를 화면에 표시하려면 자체적으로 매핑되는 최상위 내부의 지오메트리 관리자가 적절하게 관리해야합니다. 그런 다음 화면의 나머지 부분에 상대적으로 최상위 레벨과 최상위 레벨 모두에서 윈도우 스택 상단으로 올려야합니다.그 문제가 될 수 있도록

pack $thecanvas; # Or “grid $thecanvas” or any of a number of other alternatives 
update 
raise $thecanvas 
raise -force [winfo toplevel $thecanvas] 
update 
# Do the capture here 

그러나, 귀하의 경우는 위젯의 복잡한 스택 내부 : 종종 당신과 함께 그렇게 할 수 있습니다. (예를 들어, 캔버스를 스크린이나 그와 같은 것으로 매핑하도록 강요 할 수 있습니다. 모든 종류의 복잡성이 가능합니다!) 그렇다면 다른 캔버스에서 컨텐츠를 생성하는 것입니다.)가 해결 방법이 될 수 있습니다. 그 캔버스가 물리적으로 화면에 표시되어야하는지는 모르지만, 그렇다고 생각됩니다. 당신이 정말로 이런 변환을 많이하고 있다면 일반적으로


는, 그 항상 조금 색다른을의로 (이미지에 대신 직접 화면 캡처를 통해 캡슐화 된 포스트 스크립트로 변환 아마 더 낫다 불확실 함). 이를 수행하기위한 일반적인 도구는 고스트 스크립트 (Ghostscript)입니다. 종종 ImageMagick 제품군에 래핑되어 있으며, 사용자의 화면에 전혀 액세스하지 않고 이러한 변환을 수행 할 수 있습니다.

+0

이미지를 생성하려고 할 때 캔버스가 맨 위에 표시되고 원리 상 :: canvas :: snap이 캔버스가있는 창을 맨 위로 올리는 것을 처리합니다. 그래서 아마도 가장 큰 문제는 내가 사용하고있는 복잡한 위젯 스택에 대해 언급하는 것입니다. 나는 간단한 캔버스로 시도 할 것이다. 당신의 대답에서 eps에서 다른 이미지 포맷으로 변환 할 수있는 기본 TclTk 패키지가 없다는 것을 이해해야합니까? – kbr85