※ 요약

가끔 사이트들을 돌아다니다 보면 캡쳐를 하고 싶은 사이트들이 있다. 그것도 풀 화면 캡쳐로다가! 그래서 준비한 이번 포스트는 자신이 캡처하고 싶은 사이트의 URL 주소만 넣으면 손 쉽게 풀 화면으로 캡처 해주는 유틸리티성 사이트를 소개하고자 한다. 따로 프로그램이나 액티브X, 플러그인 등을 설치할 필요가 없으며 추가로 사이트의 소스 코드도 제공받을 수 있어 참 유용한 사이트다.




※ 설명

상기의 링크로 이동하면 아래와 같은 화면을 볼 수 있는데, 에디트 박스에 캡쳐하고 싶은 사이트 주소를 입력한뒤 Capture 버튼을 누른다.



수 초가 지난뒤 아래와 같이 캡쳐 화면과 함께 소스코드도 받을 수 있다. 캡쳐 이미지는 마우스 우클릭하여 다른 이름을 저장하면 된다.




※ 요약

맥이나 맥북에서의 캡쳐는 윈도우보다 더 간편하고 편리하며, 기능 또한 더 강력하다. 캡쳐하는 방법은 크게 2가지다. 단축키를 이용하는 방법과 기본 프로그램을 이용한 방법이 그 두 가지인데, 이번 포스트에서 모두 소개하도록 하겠다.


※ 캡쳐시 저장되는 경로

캡처된 이미지의 저장 경로는 로그인한 유저의 바탕화면(/Users/유저명/Desktop)이다. 저장되는 경로는 원하는 경로로 바꿀수 있는데, 필자는 그림 폴더로 변경하였고 나중에 변경 방법도 포스팅하도록 하겠다.



※ 단축키를 이용한 캡쳐 방법

필자는 주로 단축키를 이용하는 편이다. 단축키만 알면 순식간에 캡쳐를 할 수 있어서 빠르고 간편하기 때문이다. 아마 맥 유저 대부분이 단축키를 이용하여 캡쳐를 하지 않을까 싶다.

 설명

 단축키

 전체 화면 캡쳐

  command  +  shift  +  

 임의 영역 캡쳐

  command  +  shift  +  4 

 특정 창만 캡쳐

  command  +  shift  +  4  +  space 



※ 기본 프로그램을 이용한 캡쳐 방법

먼저 런처패드 -> 기타 -> 화면 캡처까지 이동하여 프로그램을 실행 시킨다.



아래와 같이 실행된 화면 캡처 프로그램을 클릭하면 상단 메뉴가 캡처할수 있게 활성화되고, 원하는 항목을 선택하여 캡처하면 된다.


OpenGL로 구현한 프로그램에 화면 캡쳐 기능이 필요해서 오동님 블로그를 참조해서 사용하다가 리눅스(Qt)에서도 사용하게 될 일이 있어서 수정한 거 올립니다. 확인 결과 MFC, Win32 API 에서 문제 없이 잘 동작하며 리눅스에의 확인은 제 친구가 했는 데 리눅스에서도 문제 없이 잘 동작한다고 하네요.(비트맵 관련 구조체가 없어서 구조체는 직접 추가했다고 함)


void ScreenCapture( const char *strFilePath )
{
	//비트맵 파일 처리를 위한 헤더 구조체
	BITMAPFILEHEADER	BMFH;
	BITMAPINFOHEADER	BMIH;

	int nWidth = 0;
	int nHeight = 0;
	unsigned long dwQuadrupleWidth = 0;		//LJH 추가, 가로 사이즈가 4의 배수가 아니라면 4의 배수로 만들어서 저장

	GLbyte *pPixelData = NULL;				//front buffer의 픽셀 값들을 얻어 오기 위한 버퍼의 포인터

#ifdef WIN32
	//윈도우의 클라이언트 영역 좌표
	RECT ImageRect;
	GetClientRect( *m_hWndCopy, &ImageRect );			

	//이미지 영역 좌표를 이용하여 실제 이미지의 사이즈를 계산
	nWidth  = ImageRect.right - ImageRect.left;		//윈도우 버전의 경우 사이즈 변경이 되므로 그때그때 조사
	nHeight = ImageRect.bottom - ImageRect.top;

#else
	nWidth  = 1024;		//(나의 경우)리눅스에서의 경우 해상도 고정이므로 그 값을 입력
	nHeight = 768;

#endif

	//4의 배수인지 아닌지 확인해서 4의 배수가 아니라면 4의 배수로 맞춰준다.
	dwQuadrupleWidth = ( nWidth % 4 ) ? ( ( nWidth ) + ( 4 - ( nWidth % 4 ) ) ) : ( nWidth );

	//비트맵 파일 헤더 처리
	BMFH.bfType  = 0x4D42;		//B(42)와 M(4D)에 해당하는 ASCII 값을 넣어준다.
	//바이트 단위로 전체파일 크기
	BMFH.bfSize  = sizeof( BITMAPFILEHEADER ) + sizeof( BITMAPINFOHEADER ) + ( dwQuadrupleWidth * 3 * nHeight );
	//영상 데이터 위치까지의 거리
	BMFH.bfOffBits = sizeof( BITMAPFILEHEADER ) + sizeof( BITMAPINFOHEADER );

	//비트맵 인포 헤더 처리
	BMIH.biSize				= sizeof( BITMAPINFOHEADER );		//이 구조체의 크기
	BMIH.biWidth			= nWidth;							//픽셀 단위로 영상의 폭
	BMIH.biHeight			= nHeight;							//영상의 높이
	BMIH.biPlanes			= 1;								//비트 플레인 수(항상 1)
	BMIH.biBitCount			= 24;								//픽셀당 비트수(컬러, 흑백 구별)
	BMIH.biCompression		= BI_RGB;							//압축 유무
	BMIH.biSizeImage		= dwQuadrupleWidth * 3 * nHeight;	//영상의 크기
	BMIH.biXPelsPerMeter	= 0;								//가로 해상도
	BMIH.biYPelsPerMeter	= 0;								//세로 해상도
	BMIH.biClrUsed			= 0;								//실제 사용 색상수
	BMIH.biClrImportant		= 0;								//중요한 색상 인덱스

	pPixelData = new GLbyte[ dwQuadrupleWidth * 3 * nHeight ];	//LJH 수정

    //프런트 버퍼로 부터 픽셀 정보들을 얻어온다.
	glReadPixels(
		0, 0,					//캡처할 영역의 좌측상단 좌표
		nWidth, nHeight,		//캡처할 영역의 크기
		GL_BGR,					//캡처한 이미지의 픽셀 포맷
		GL_UNSIGNED_BYTE,		//캡처한 이미지의 데이터 포맷
		pPixelData				//캡처한 이미지의 정보를 담아둘 버퍼 포인터
		);

	{//저장 부분
		FILE *outFile = fopen( strFilePath, "wb" );
		if( outFile == NULL )
		{
			//에러 처리
			//printf( "에러" );
			//fclose( outFile );
		}

		fwrite( &BMFH, sizeof( char ), sizeof(BITMAPFILEHEADER), outFile );			//파일 헤더 쓰기
		fwrite( &BMIH, sizeof( char ), sizeof(BITMAPINFOHEADER), outFile );			//인포 헤더 쓰기
		fwrite( pPixelData, sizeof( unsigned char ), BMIH.biSizeImage, outFile );	//glReadPixels로 읽은 데이터 쓰기

		fclose( outFile );	//파일 닫기
	}

	if ( pPixelData != NULL )
	{
		delete pPixelData;
	}
}


아래는 위의 함수로 저장한 bmp파일들입니다.

+ Recent posts