문제

고 싶을 만들 수 있는 대형(말 20,000x20,000)픽셀트맵에서는 C++MFC 응용 프로그램을 사용하여,CDC 파생 클래스를 작성하는 비트맵.해봤을 사용하여 메모리 Dc 로에서 설명은 MSDN 문서,하지만 이것은 제한된 크기와 호환되는 현재의 디스플레이 드라이버.

나는 현재 사용하는 비트맵 프린트 드라이버하는 일이지만,그것은 매우 느리게 사용이 매우 많은 양의 중간 저장해 감 GDI 정보입니다.

이 솔루션을 찾고 있어요하지 않아야를 포함 메타파일 또는 스풀링,모델로는 내 그림은 수백만의 GDI 호출을 렌더링합니다.

사용할 수 있는 분할 및 정 접근 방식을 통해 여러 메모리 Dc 지만,그것은 것 같다 꽤 cumborsome 고 우아하지 못한 기술입니다.

어떤 생각?

도움이 되었습니까?

해결책

CDC 및 CBitmap 나만 지원하는 장치에 의존한 비트맵 더 많은 행운을 할 수 있습니다 만들기의 비트맵 ::CreateDIBSection, 다음 연결 CBitmap 습니다.원 GDI 인터페이스들은 작은 회백색도해 보시기 바랍니다.

당신은 아마 없을 것이 많은 행운을 가진 20,000x20,000 32BPP,적어도에서 32 비트 응용 프로그램 제공에서 약 1.5GB 의 메모리,하지만,나는 유효한 HBITMAP 돌아와 16bpp:

BITMAPINFOHEADER bmi = { sizeof(bmi) };
bmi.biWidth = 20000;
bmi.biHeight = 20000;
bmi.biPlanes = 1;
bmi.biBitCount = 16;
HDC hdc = CreateCompatibleDC(NULL);
BYTE* pbData = 0;
HBITMAP hbm = CreateDIBSection(hdc, (BITMAPINFO*)&bmi, DIB_RGB_COLORS, (void**)&pbData, NULL, 0);
DeleteObject(SelectObject(hdc, hbm));

다른 팁

이는 특별로 나는 자주 만들어 DC 화면을 기준으로 사용되는 비트맵 이미지는 것보다 훨씬 더 큰 스크린-3000 픽셀에서 플러스 일부례에 전혀 문제가 없습니다.당신은 약간의 샘플 코드를 보여주는 이 문제에서 작업?

고려하고 큰 이미지 해상도를 만들 수 없습니다 이미지가 사용하는 호환되는 비트맵입니다.

예제:

pixel depth=32 비트=4bytes per pixel

pixel count=20.000*20.000=400.000.000

총 bytes=픽셀수*4=1.600.000.000bytes=1.562.500kb~=1525MB~=1.5GB

나는 사색에 대한 최종 의도,그러나를 만든다고 가정하고 사용자가 탐구하는 거대 지도 매우 상세한 가져옵니다.을 만들어야 합니다 사용자 지정한 이미지 파일 형식으로;할 수 있습 안에 넣어는 파일에 다양한 레이어를 포함하는 그리드의 비트맵 예를 들어,가속화를 위해 렌더링을 수행합니다.렌더링 프로세스를 사용할 수 있습 GDI 찜하거나 GDI+을 만들 부분적인 이미지를 렌더링합니다.물론 이에 필요 일부는 실험/을 최적화하에 도달하는 완벽한 사용자는 느낌입니다.

행운

을 유지하는 메모리 사용이 허용 한계 내에서,당신은 당신을 사용해야 너의'나누고 정복하는'전략입니다.그것은 해킹이 구현된 경우 오른쪽 그것은 실제로 매우 우아한 방법을 다루는 비트맵의 무한한 크기입니다.그것은 바로 디자인,결합할 수 있는'만을 렌더/표시의 일부 이미지','렌더링이 전체 이미지에 대한 낮은 해상도에서 화면에 표시'와'렌더링은 디스크에 있는 비트맵'접근에서 하나의 엔진과 shield 사용자의 코드(대부분에서 자신 두 가지 주))에서 분리해야 합니다.나는 작업에 제품과 동일한 문제점:렌더링(잠재적으로 큰)지도를 화면이나습니다.bmp 파일이 있습니다.

는 경우 이미지는 것을 이상-말 hi-res 검사 x-ray-당신은 수도에서 보고 싶은 쓰는 사용자 정의 스풀링을 위한 루틴-그것 1.5gb 은 매우 비싼-도 현대 데스크탑.

는 경우 그것은 벡터 기반으로 다음에서 볼 수 있습 SVG 으로 그것을 지원합 보기 포트 및 대부분의할 수 있을 렌더링하여 다른 형식으로 제공해 드립니다.내가 사용하는 SVG JPG 을 통해 바틱(java)그래서 수행 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top