2012-10-31 5 views
0

레이아웃 :추가 공백

나는 문서를 스캔하기 위해 타사 컨트롤을 사용하고 있습니다. 이미지 (주로 이미지에 주석을 추가하는 데 사용됨)를 스캔 할 때 발생하는 이벤트가 있습니다. 이 이벤트는 .PAhDC이라는 하나의 속성 만 제공합니다. 이 속성은 파일에 기록되기 전에 이미지를 저장하는 DC에 대한 핸들입니다. 따라서 이미지가 파일에 기록되기 전에 이미지를 변경할 수 있습니다.

예상 결과 :

나는 단순히 1/4 인치를 추가 할 이미지의 매우 상단에 공백 라인 (100 개 픽셀을 말할 수) 것입니다. 원본 이미지가 200x200 (WxH)이면 내 최종 이미지는 200x300이어야합니다.

질문과 다른 생각 :

어떻게 만이 DC가 처리 할 것 알고로 기존 이미지를 변경할 수 있습니까? 다음과 같은 일을 할 생각이었습니다 ...

  1. 새 DC를 만듭니다.
  2. 원본 이미지보다 100 픽셀 큰 새 비트 맵을 만듭니다.
  3. 새 DC에서 새 비트 맵을 사용하십시오.
  4. 원본 이미지를 새 비트 맵 (맨 위부터 시작하여 100 픽셀)으로 복사합니다.
  5. 그런 다음 SelectObject와 같은 것을 사용하여 원래 hDC의 이전 비트 맵을 새 것으로 교체 한 다음 이전 비트 맵 객체를 삭제합니다.

참고 : 가능한 한 MANAGED CODE (관리 코드)로 수행하고 싶습니다. 생각할 수있는 유일한 방법은 SelectObject()를 사용하는 것이지만 물론 관리되지 않는 코드입니다./

답변

0

와 호환 만들기와 DC 호환 확인 비트 맵과 DC의 소유자와

DeviceContext는 순수 DIB/비트 맵에 대한 뷰포트이며 크기 또는 치수 개념이 없습니다 (클리핑 영역 초과). 새 비트 맵을 작성하여 DC로 선택할 수 있지만 응용 프로그램 당신이 한 일을 무시하고 그것이 만든 DIB를 사용합니다. 이 결과는 GDI 개체 누수가되며 기본 이미지는 변경되지 않습니다.

당신이 묻는 것을하기 위해서는 다른 코드와 완전한 협력이 필요하며 기본 데이터를 대체 할 수있는 방법을 추가해야합니다.

+0

나는 그것을 받아 들일 수 없었습니다. DC에서 비트 맵에 무엇을 할지라도 (예 : Deanna가 바꾸거나 바꾸지 않음) "새로운"비트 맵이 부모 함수에서 무시되기 때문에 변경 사항이 무시됩니다. ...또는 그래서 비트 맵을 바꿀 때 적합하다고 생각하고 있습니다. –

0

물론 관리되는 코드에서이 작업을 수행 할 수 있습니다. 모든 P/Invoke 선언은 적절한 검색 엔진에서 즉시 사용할 수 있습니다. 새로운 DC를 만들 때

  • , 그것은 새로운 비트 맵을 만들 때 원래
  • , 확실히 당신이 협력 없이는 할 수없는 DC
관련 문제