cbitmap 예제

프로그램 외부에서 시작된 비트맵을 표시하는 예제 프로그램을 보았습니다. 이제 화면에서 부드러운 동작을 지원하기 위해 자체 비트맵을 생성하는 예제 프로그램이 표시됩니다. 원칙은 간단합니다 : 선택한 비트맵으로 메모리 장치 컨텍스트를 그린 다음 비트맵을 화면에 zap합니다. CImage는 Win32 및 GDI+ 기능의 조합을 래핑합니다. 이 컨텍스트에서 내 사용은 저장 메서드에 대 한 엄격 하 게. CImage::Save 메서드는 기본적으로 Gdiplus::Bitmap:Save 메서드를 래핑합니다. 또한 Gdiplus::GetImageEncoder (및 종속 메서드)를 활용하여 올바른 인코더를 가져옵니다. http://www.codeguru.com/cpp/g-m/gdi/gdi/article.php/c3661/ 직접 (즉, ATL없이) GDI +를 사용하여 파일에 비트 맵을 저장하는 좋은 예가있습니다. 다른 GDI 도구와 달리 비트맵을 만드는 에는 일반적으로 더 많은 단계가 포함됩니다. 예를 들어 창에 표시할 비트맵을 만들 수 있습니다. 기하학적 영역을 페인그하기 위해 다른 비트맵을 만들 수 있으며, 이 경우 비트맵이 브러시로 사용됩니다. MYMFC26A 예제에서는 MM_LOENGLISH로 설정된 매핑 모드를 사용하여 스크롤 보기에 리소스 기반 비트맵을 표시합니다.

이 프로그램은 위에서 설명한 StretchBlt() 논리를 사용하지만 메모리 장치 컨텍스트와 비트맵은 뷰의 OnInitialUpdate() 멤버 함수에서 만들어지고 프로그램의 수명 동안 마지막으로 생성됩니다. 또한 프로그램은 CGdiObject 멤버 함수 GetObject()에 대한 호출을 통해 비트맵 크기를 읽므로 앞의 예제와 같이 하드 코딩된 값을 사용하지 않습니다. 예를 들어 창에 그리려면 먼저 GetDC(창을 사용하여 창을 나타내는 HDC를 retreive)한 다음 이미지 그리기에 BitBlt() 같은 HDC를 사용하는 GDI 함수, 텍스트 그리기를 위한 TextOut(), 선에 대한 LineTo()를 사용할 수 있습니다. 다음은 텍스트 편집기에서 볼 때 RC(리소스 스크립트) 파일의 예제 항목입니다. DIF를 사용하는 경우 색상과 프린터로 더 쉽게 시간을 보낼 수 있습니다. 경우에 따라 더 나은 성능을 얻을 수 있습니다. Win32 함수 CreateDIBSection()은 GDI 비트맵의 모든 기능과 결합된 DiB의 이점을 제공합니다. 마지막으로 MFC CBitmapButton 클래스를 사용하여 푸시 버튼에 비트맵을 넣는 방법을 배웁니다. CBitmapButton을 사용하여 푸시 버튼에 비트 맵을 넣는 것은 DB와는 아무 상관이 없지만 예제없이 마스터하기 어려운 유용한 기술입니다. 비트맵1 예제의 디스플레이 매핑 모드가 MM_TEXT인 경우 각 비트맵 픽셀은 표시 픽셀에 매핑되고 비트맵은 완벽하게 맞습니다. 매핑 모드가 MM_LOENGLISH인 경우 비트맵 크기는 0.54×0.96인치 또는 Windows 95의 경우 52×92 픽셀이며 GDI는 비트맵에 맞게 만들기 위해 약간의 크런치를 수행해야 합니다. 따라서 MM_LOENGLISH 매핑 모드에서비트맵이 좋지 않을 수 있습니다.

CDC::SetStretchBltMode의 매개 변수 값을 사용 하 여 COLORONCOLOR 축소 된 비트 맵 을 더 멋지게 만들 것입니다. 비트맵에 표시할 수 있는 색상 수에 따라 다양한 유형의 비트맵이 있습니다. 우선 비트맵은 흑백일 수 있으며, 이 경우 각 픽셀은 1비트에 해당합니다. 비트맵에 색을 지정할 수도 있습니다. 비트맵이 표시할 수 있는 색상 수는 구덩이/픽셀 수로 2개 증가합니다. 예를 들어 간단한 비트맵은 4개의 구덩이/픽셀만 사용하거나 4bpp는 24 = 16색상만 처리할 수 있습니다. 8bpp가 필요한 보다 향상된 비트맵은 28 = 256 색상을 처리할 수 있습니다. 비트맵은 장치에 표시할 가용성을 제어하는 두 가지 범주로 나뉩니다. PAINTSTRUCT는 페인팅중인 창과 페인트 메시지와 정확히 무슨 일이 일어나고 있는지에 대한 정보를 포함하는 구조입니다.

대부분의 간단한 작업의 경우 포함된 정보를 무시하기만 하면 되지만 BeginPaint()로 호출하는 데 필요합니다.