Main Content

getframe

좌표축 또는 Figure를 동영상 프레임으로 캡처

설명

예제

F = getframe은 현재 좌표축을 화면에 표시되는 대로 동영상 프레임으로 캡처합니다. F는 이미지 데이터를 포함하는 구조체입니다. getframe은 좌표축을 화면에 표시되는 것과 동일한 크기로 캡처합니다. 좌표축 윤곽선 밖에 있는 눈금 레이블이나 다른 내용은 캡처하지 않습니다.

예제

F = getframe(ax)는 현재 좌표축 대신 ax로 식별된 좌표축을 캡처합니다.

예제

F = getframe(fig)fig로 식별된 Figure를 캡처합니다. 좌표축 제목, 레이블, 눈금을 포함하여 Figure 창의 내부 전체를 캡처하려면 Figure를 지정하십시오. Figure 창의 메뉴와 도구 모음은 동영상 프레임에 캡처되지 않습니다.

F = getframe(___,rect)rect로 정의된 사각형 내의 영역을 캡처합니다. rect[left bottom width height] 형식의, 요소를 4개 가진 벡터로 지정합니다. 이 옵션은 위에 열거된 구문의 ax 또는 fig 입력 인수와 함께 사용할 수 있습니다.

예제

모두 축소

두 개의 선을 플로팅합니다. 좌표축을 캡처하고 이미지 데이터를 반환합니다. getframe은 좌표축과 좌표축 윤곽선의 내부를 캡처합니다. 좌표축 윤곽선을 벗어나는 내용은 캡처되지 않습니다.

plot([0 1; 1 2])
F = getframe;

Line plot in a figure

F는 구조체로, 필드 cdata에 캡처된 이미지 데이터를 저장합니다.

imshow를 사용하여, 캡처된 이미지 데이터를 표시합니다.

figure
imshow(F.cdata)

Copy of the line plot

곡면 플롯을 만듭니다. 메뉴와 도구 모음을 제외한 Figure 창의 내부를 캡처합니다.

surf(peaks)
F = getframe(gcf);

Surface plot in a figure that has a light gray background

F는 구조체로, 필드 cdata에 캡처된 이미지 데이터를 저장합니다.

캡처된 영역을 볼 수 있도록, 캡처된 이미지 데이터를 imshow를 사용하여 배경이 더 어두운 Figure에 표시합니다.

figure('Color',[0.5 0.5 0.5])
imshow(F.cdata)

Copy of the surface plot displayed in a larger figure. The background color of the larger figure is darker than the background color of the original figure.

좌표축의 내부와, 각 방향에서 30픽셀 두께의 여백을 캡처합니다. 추가된 여백은 캡처 프레임에 눈금 레이블을 포함시키기 위해 필요합니다. 눈금 레이블 크기에 따라 여백을 조정해야 할 수도 있습니다.

두 개의 선을 플로팅합니다.

plot([0 1; 1 2])

Line plot in a figure that has a light gray background

좌표축 단위를 픽셀로 변경하고 현재 좌표축 위치를 반환합니다. 위치 벡터의 세 번째 요소와 네 번째 요소는 좌표축 너비와 높이를 픽셀 단위로 지정합니다.

drawnow
ax = gca;
ax.Units = 'pixels';
pos = ax.Position
pos =

   73.8000   47.2000  434.0000  342.3000

좌표축과 원하는 여백을 모두 감싸는 사각형 영역을 정의하는, 요소를 4개 가진 벡터 rect를 만듭니다. rect의 처음 두 개 요소는 좌표축의 왼쪽 아래 코너에 대해 상대적인, 사각형의 왼쪽 아래 코너를 지정합니다. rect의 마지막 두 개 요소는 사각형의 너비와 높이를 지정합니다. 좌표축 단위를 디폴트 값인 'normalized'로 재설정합니다.

marg = 30;
rect = [-marg, -marg, pos(3)+2*marg, pos(4)+2*marg];
F = getframe(gca,rect);
ax.Units = 'normalized';

캡처된 영역을 볼 수 있도록, 캡처된 이미지 데이터를 imshow를 사용하여 배경이 더 어두운 Figure에 표시합니다.

figure('Color',[0.5 0.5 0.5])
imshow(F.cdata)

Copy of the line plot displayed in a larger figure. The copy is tightly cropped around the axes to include the tick labels. The background color of the larger figure is darker than the background color of the original figure.

캡처된 이미지 데이터에 제목, 축 레이블, 눈금 레이블이 포함되도록 좌표축 둘레의 여백을 계산합니다.

제목과 x축 레이블이 있는 플롯을 만듭니다.

plot([0 1; 1 2])
xlabel('x values')
title('Plot of Two Lines')

Line plot in a figure that has a light gray background

좌표축 단위를 픽셀로 변경하고 좌표축의 Position 속성값과 TightInset 속성값을 저장합니다. TighInset 속성은 [left bottom right top] 형식의, 요소를 4개 가진 벡터입니다. 이 값들은 눈금 값과 텍스트 레이블을 표시하기 위해 좌표축 둘레에 사용된 여백입니다.

drawnow
ax = gca;
ax.Units = 'pixels';
pos = ax.Position;
ti = ax.TightInset;

좌표축과 자동으로 계산된 여백을 모두 감싸는 사각형 영역을 정의하는, 요소를 4개 가진 벡터 rect를 만듭니다. rect의 처음 두 개 요소는 좌표축의 왼쪽 아래 코너에 대해 상대적인, 사각형의 왼쪽 아래 코너를 지정합니다. rect의 마지막 두 개 요소는 사각형의 너비와 높이를 지정합니다.

rect = [-ti(1), -ti(2), pos(3)+ti(1)+ti(3), pos(4)+ti(2)+ti(4)];
F = getframe(ax,rect);

캡처된 영역을 볼 수 있도록, 캡처된 이미지 데이터를 imshow를 사용하여 배경이 더 어두운 Figure에 표시합니다.

figure('Color',[0.5 0.5 0.5])
imshow(F.cdata)

Copy of the line plot displayed in a larger figure. The copy is tightly cropped around the axes to include the tick labels, the x-axis label, and the plot title. The background color of the larger figure is darker than the background color of the original figure.

tiledlayout 함수를 호출하여 2×1 타일 형식 차트 레이아웃을 만듭니다. nexttile 함수를 호출하여 axes 객체 ax1ax2를 만듭니다. 각 좌표축에 선을 플로팅합니다.

tiledlayout(2,1)
ax1 = nexttile;
plot(1:10,'b')
ax2 = nexttile;
plot(1:10,'r')

Two vertically stacked line plots in a figure. The upper plot displays a blue line, and the lower plot displays a red line. Both plots display x-axis and y-axis tick labels.

하부 좌표축의 내용을 캡처합니다. getframe은 플롯의 내부와 테두리를 캡처합니다. 플롯의 윤곽선을 벗어나는 눈금 값이나 레이블은 캡처하지 않습니다.

F = getframe(ax2);

imshow를 사용하여, 캡처된 이미지 데이터를 표시합니다.

figure
imshow(F.cdata)

Copy of the lower plot, which contains the border around the plot and the tick marks but not the tick labels

getframe을 루프에서 사용하여 peaks 함수 진동의 프레임을 기록합니다. 배열을 사전할당(Preallocation)하여 동영상 프레임을 저장합니다.

Z = peaks;
surf(Z)
axis tight manual
ax = gca;
ax.NextPlot = 'replaceChildren';

loops = 40;
F(loops) = struct('cdata',[],'colormap',[]);
for j = 1:loops
    X = sin(j*pi/10)*Z;
    surf(X,Z)
    drawnow
    F(j) = getframe(gcf);
end

동영상을 두 번 재생합니다.

fig = figure;
movie(fig,F,2)

입력 인수

모두 축소

캡처할 좌표축으로, Axes 객체 또는 GeographicAxes 객체로 지정됩니다. 현재 좌표축이 아닌 좌표축을 캡처하려면 이 옵션을 사용하십시오.

getframe은 좌표축 윤곽선을 둘러싸는 가장 작은 사각형 내의 내용을 캡처합니다. 모든 눈금 값과 눈금 레이블을 캡처하려면 fig 입력 인수를 대신 사용하십시오.

예: F = getframe(ax);

캡처할 Figure로, Figure 객체로 지정됩니다.

캡처할 사각형 영역으로, [left bottom width height] 형식(단위: 픽셀)의, 요소를 4개 가진 벡터로 지정됩니다. left 요소와 bottom 요소는 사각형의 왼쪽 아래 코너의 위치를 정의합니다. 이 위치는 getframe에 대한 첫 번째 입력 인수로 지정된 Figure 또는 좌표축에 상대적인 위치입니다. width 요소와 height 요소는 사각형의 크기를 정의합니다.

Figure 창 내에 완전히 포함된 사각형을 지정합니다.

참고

향후 릴리스에서 rect 인수는 더 이상 Figure 도구 모음, 메뉴 모음 또는 Figure 주위의 테두리를 캡처하지 않습니다. 캡처할 Figure의 하위 섹션을 계속해서 정의할 수 있지만 도구 모음, 메뉴 모음 및 테두리는 포함되지 않습니다. 다른 방법으로, exportapp 함수를 사용하여 테두리를 제외한 도구 모음과 메뉴 모음을 캡처할 수 있습니다.

출력 인수

모두 축소

동영상 프레임으로, 다음 두 개의 필드를 갖는 구조체로 반환됩니다.

  • cdatauint8형 값의 배열로 저장된 이미지 데이터입니다. 이미지 데이터 배열의 크기는 화면 해상도에 따라 달라집니다.

  • colormap — 컬러맵입니다. 트루컬러 시스템에서는 이 필드가 비어 있습니다.

참고

cdata의 크기와 관련하여 고려해야 할 몇 가지 중요한 사항이 있습니다.

  • getframe이 캡처하는 영역(Figure, 좌표축, 또는 rect로 지정된 영역)의 크기를 쿼리하면 해당 크기(단위: 픽셀)가 cdata의 요소 개수와 일치하지 않을 수 있습니다. 이러한 차이가 발생하는 이유는 cdata의 요소 개수는 화면 해상도(및 운영 체제 설정)에 따라 달라지지만 MATLAB®의 픽셀 수는 화면에 표시되는 실제 픽셀 수와 일치하지 않을 수 있기 때문입니다.

  • R2015b부터는 고해상도 시스템을 사용하는 경우 cdata의 크기가 이전 릴리스나 다른 시스템에 비해 더 클 수 있습니다.

제한 사항

  • getframeMATLAB Online™ 또는 Web Apps (MATLAB Compiler)에서 다음 기능을 지원하지 않습니다.

    • uifigure 함수로 만든 Figure의 내용 또는 해당 Figure의 좌표축 캡처하기.

    • 앱 디자이너로 만든 앱의 콘텐츠 또는 해당 앱의 좌표축 캡처하기.

세부 정보

모두 축소

픽셀

Windows®Macintosh 시스템에서 거리(단위: 픽셀)는 시스템 해상도와 관계가 없습니다. 즉, 다음과 같습니다.

  • Windows 시스템에서 1픽셀은 1/96인치입니다.

  • Macintosh 시스템에서 1픽셀은 1/72인치입니다.

Linux® 시스템에서 픽셀 크기는 시스템 해상도에 의해 결정됩니다.

  • getframe 사용 시 성능 속도를 최대화하려면 Figure가 화면에 표시되어 있어야 합니다. Figure가 표시되어 있지 않아도 getframe은 Figure를 캡처할 수 있지만 느릴 수 있습니다.

  • 이미지 데이터의 해상도를 더 자세히 제어하려면 print 함수를 대신 사용하십시오. print 함수에 cdata 출력 인수를 사용하면 이미지 데이터가 반환됩니다. resolution 입력 인수는 이미지 해상도를 제어합니다.

  • 3차원 플롯의 옆에 표시된 컬러바와 범례가 캡처되도록 하려면 getframe을 호출할 때 fig 인수를 지정하십시오.

버전 내역

R2006a 이전에 개발됨

모두 확장