4장 영상 입출력 프로그램 만들기 비트맵 파일, MDI를 이용한 입출력 프로그램 (THU)

Slides:



Advertisements
Similar presentations
1 파일 및 폴더 다루기 A. 파일이란 : 응용프로그램을 이용해서 만든 사용자가 만든 정보의 집합 - 파일 형식 : 이름과 확장자로 이뤄짐 예 sample.txt 샘플.txt - 복원하려면 휴지통에서 파일선택 후 드래그해서 밖으로 이동 혹은 RESTORE B. 확장자의.
Advertisements

컴퓨터와 인터넷.
목 차 C# 언어 특징 .NET 프레임워크 C# 콘솔 프로그램 C# 윈도우 프로그램 실습 프로그래밍세미나 2.
기초C언어 제1주 실습 강의 소개, C언어 개요, Cygwin/Eclipse 사용 컴퓨터시뮬레이션학과 2016년 봄학기
OpenCV 안드로이드 연동 환경설정 OpenCV-Android 를 다운 받습니다.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
Lab 10 Guide: 프린터 출력 예제. 한 페이지의 그림 인쇄 (교재 24장, 쪽)
컴퓨터프로그래밍 1주차실습자료 Visual Studio 2005 사용법 익히기.
Image & Video processing
제14장 동적 메모리.
5강. Servlet 본격적으로 살펴보기-I 프로젝트 만들기 doGet() doPost()
신호처리 실험 (Signal Processing Lab)
윤 홍 란 다이알로그(대화상자) 윤 홍 란
제 9 장 구조체와 공용체.
데이터 파일 C 데이터 파일과 스트림(Stream) 텍스트 파일 처리
나민영 서경대학교 컴퓨터공학과 CGVR Lab 같이만들어보자 5주차 OpenCV 설정 및 기초.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
07. 디바이스 드라이버의 초기화와 종료 김진홍
CHAPTER 02 OpenCV 개요 PART 01 영상 처리 개요 및 OpenCV 소개.
C / C++ Programming in multi platform
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
                              데이터베이스 프로그래밍 (소프트웨어 개발 트랙)                               퍼스널 오라클 9i 인스톨.
WinCE Device Driver 실습 #3
학습목표 학습목차 다른 홈페이지의 HTML 파일 코드를 보는 방법에 대해 알아봅니다.
BMP(Bit Map).
C#.
C 2장. C 프로그램 시작하기 #include <stdio.h> int main(void) { int num;
Slice&link.
Method & library.
JA A V W. 03.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
인터넷응용프로그래밍 JavaScript(Intro).
박성진 컴퓨터 프로그래밍 기초 [09] 배열 part 1 박성진
메모리 관리 & 동적 할당.
영상처리 실습 인공지능연구실.
24장. 파일 입출력.
Lab 1 Guide: 교재 2장 DrawX ( 쪽)
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
USN(Ubiquitous Sensor Network)
3D 프린팅 프로그래밍 05 – 반복패턴 만들기 강사: 김영준 목원대학교 겸임교수.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
빌드 성공.
컴퓨터 계측 및 실습 디지털 출력 영남대학교 기계공학부.
Fucntion 요약.
학습목표 처음 만드는 비주얼 베이직 프로그램 프로그램 실행과 실행 파일 생성. 학습목표 처음 만드는 비주얼 베이직 프로그램 프로그램 실행과 실행 파일 생성.
OpenCV 설정 2.21 만든이 딩딩.
자료관리 : 현 화면에서 인쇄할 자료를 입력하여 발행하는 화면 입니다.
영상처리 실습 (OpenCV + MFC) Chonbuk National University A.I. Lab.
기초 C언어 제14주 실습 전처리 및 비트필드, 스트림과 파일 입출력, 동적메모리와 연결 리스트
가장 많이 사용 Accelerator 최상위 WM_COMMAND, OLE 메시지 관련 이벤트 처리만 가능 이 클래스를 상속받아서 다른 이벤트 처리 이벤트 처리 관련 윈도우(창) 최상위 클래스 멀티 테스킹(모듈) CFrameWnd, Cview,
01. 분산 파일 시스템의 개요 네트워크에 분산된 파일을 사용자가 쉽게 접근하고 관리할 수 있게 해준다.
기초C언어 제2주 실습 프로그래밍의 개념, 프로그램 작성 과정 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원
함수, 모듈.
구조체(struct)와 공용체(union)
9 브라우저 객체 모델.
슬라이드 쇼의 설정 슬라이드 쇼의 실행 파일과 폴더의 관리 글꼴을 포함해서 저장 웹 페이지로 게시 압축 파일
Numerical Analysis Programming using NRs
Chapter 12 파일 입출력.
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
06. 디바이스의 등록과 해제 김진홍
아두이노 프로그래밍 2일차 – Part4 아날로그 키패드 활용하기 강사: 김영준 목원대학교 겸임교수
숙제 작성 및 제출 과정 김진하 2008/03/14.
Reversing 발표자 : 박현우.
Power Point 예제 디자인 적용 (서식) - (디자인적용) - (원하는 디자인 선택)
7 생성자 함수.
6 객체.
BoardGame 보드게임 따라가기.
20 XMLHttpRequest.
Presentation transcript:

4장 영상 입출력 프로그램 만들기 비트맵 파일, MDI를 이용한 입출력 프로그램 2015.01.22 (THU) 발표자: 중원대학교 의료공학과 신 진솔

4.1 비트맵 파일 입ㆍ출력 하기

영상 파일의 형식 저장방식에 따른 여러 가지 파일 형식 미리 약속된 방식의 Encoding으로 픽셀 데이터를 압축하여 저장. BMP: 압축이 필요 없는 형식 JPG, PNG, GIF 미리 약속된 방식의 Encoding으로 픽셀 데이터를 압축하여 저장. 각각의 파일 형식을 읽거나 쓰기 위해 Encoding과 Decoding을 수행 해야 함. → 파일 형식의 라이브러리를 각각 제공

비트맵 파일의 구조 헤더 정보 및 픽셀 데이터

비트맵 파일의 구조 파일 헤더(BITMAPFILEHEADER) Wingdi.h 헤더파일- BITMAPFILEHEADER구조체. 파일 식별자, 파일 크기, 픽셀 데이터 시작 위치 bfType: 비트맵 파일임을 명시 bfOffBits: 픽셀데이터가 시작되는 주소 값. bfOffBitsms 트루컬러와 하이컬러처럼 팔레트가 필요하지 않은 영상은 54 팔레트가 필요한 영상이라면 54+팔레트가 저장된 크기가 더해진 값이 저장

비트맵 파일의 구조 영상정보 헤더(BITMAPINFOHEADER) Wingdi.h 헤더파일에 정의 영상 크기, 채널 수, 픽셀 데이터 형식 등

비트맵 파일의 구조 팔레트 정보 미리 정해진 색상의 집합. 영상의 색상 수만큼 기록됨. 영상의 픽셀은 색상 값을 가지는 것이 아닌 그 픽셀이 사용하는 팔 레트 색상의 번호를 가지게 됨. 회색조 영상의 경우 {0,0,0,0}~{255,255,255,255}의 값을 가진다.

비트맵 파일의 구조

읽은 값을 영상 데이터 클래스에 할당할 때는 행의 위치를 반전 시켜 주어야 함. 비트맵 파일 읽기&쓰기 비트맵 파일에서의 픽셀 배열 비트맵 파일의 좌표 계는 반대로 사용된다. 읽은 값을 영상 데이터 클래스에 할당할 때는 행의 위치를 반전 시켜 주어야 함.

비트맵 파일 읽기&쓰기 비트맵 파일 읽기 쓰기 함수 LoadImage() SaveImage() 멤버 함수로 만들어 사용 CMyImage 클래스의 멤버함수로 정의 LoadImage() 파일 열기 -> 파일 헤더 읽기 -> 영상정보 헤더 읽기 -> 픽셀 데이터 읽기 SaveImage() 파일열기 -> 파일 헤더 쓰기 -> 영상 정보 헤더 쓰기 -> (팔레트 쓰기 -> ) 픽셀 데이터 쓰기 멤버 함수로 만들어 사용 Image 변수.Loadimage(파일 이름) = 파일 명에 해당하는 이미지가 불려 들어갈 수 있도록 생성

비트맵 파일 읽기&쓰기 – Load Image()함수 ① 파일열기 → 파일 헤더 읽기→ 영상 정보 헤더 읽기 → 픽셀 데이터 읽기 픽셀 데이터 형의 크기가 BYTE형인지 확인하여 동작 파일명으로부터 BMP파일 형식이 맞는지 확인 빈 파일인지 확인 읽기 모드로 파일 읽어 들임

비트맵 파일 읽기&쓰기 – Load Image()함수 파일열기 → 파일 헤더 읽기→ 영상 정보 헤더 읽기 → 픽셀 데이터 읽기 ② 비트맵 파일 헤더를 읽고 담기 위한 구조체 생성 파일 헤더가 BM인지 확인

비트맵 파일 읽기&쓰기 – Load Image()함수 파일열기 → 파일 헤더 읽기→ 영상 정보 헤더 읽기 → 픽셀 데이터 읽기 비트맵 영상 정보 헤더를 담기 위한 구조체 생성 ↓ 256레벨의 회색조 영상 또는 트루 컬러 영상만 읽을 수 있도록 설정 이전에 할당한 변수와 크기가 같은지 확인한 후 같지 않으면 새로 할당 이미지 데이터 멤버 변수가 NULL인지 확인하여 기존에 할당된 메모리 반납 각 변수를 헤더에 저장 ③

비트맵 파일 읽기&쓰기 – Load Image()함수 파일열기 → 파일 헤더 읽기→ 영상 정보 헤더 읽기 → 픽셀 데이터 읽기 새로운 픽셀 데이터 배열 생성 (행당 원소수 * 높이) ↓ Offset 값을 이용하여 데이터 시작 위치로 이동 상하 반전이므로 맨 밑에서부터 메모리 값 저장 파일 닫음 ④

비트맵 파일 읽기&쓰기 – Save Image()함수 파일열기 → 파일 헤더 쓰기→ 영상정보 헤더 쓰기 → (팔레트 쓰기 →) 픽셀 데이터 쓰기 ① 픽셀 데이터가 BYTE형인지 확인하여 동작 파일명으로부터 BMP파일 형식이 맞는지 확인 빈 파일인지 확인 쓰기 모드로 파일 생성

비트맵 파일 읽기&쓰기 – Save Image()함수 파일열기 → 파일 헤더 쓰기→ 영상정보 헤더 쓰기 → (팔레트 쓰기 →) 픽셀 데이터 쓰기 ② 비트맵 파일 헤더를 읽고 담기 위한 구조체 생성 (파일 형식, 사이즈크기, 빈 값 2개, offset데이터 넣을 변수 생성) 파일에 구조체 작성

비트맵 파일 읽기&쓰기 – Save Image()함수 파일열기 → 파일 헤더 쓰기→ 영상정보 헤더 쓰기 → (팔레트 쓰기 →) 픽셀 데이터 쓰기 비트맵 영상 정보 헤더를 담을 구조체 생성 (사이즈, 너비, 높이, 1, 픽셀당 비트 수, 압축 형식, 전체 바이트 수, 0 0 0 0 저장) ↓ 파일에 영상정보 헤더 작성 팔레트 정보 작성 (회색 조 영상일 경우만 작성) ③

비트맵 파일 읽기&쓰기 – Save Image()함수 파일열기 → 파일 헤더 쓰기→ 영상정보 헤더 쓰기 → (팔레트 쓰기 →) 픽셀 데이터 쓰기 ④ 맨 밑에서 올라가며 저장 하여 데이터 저장

LoadImageFromDialog()함수 파일 탐색기 대화 상자를 통하여 컴퓨터 내의 영상 파일을 탐색하고 경로 획득 획득된 경로에 대하여 LoadImage() 함수 수행 LoadImageFromFileDialog.h

LoadImageFromDialog()함수 BMP형식의 파일을 선택 할 수 있는 대화상자를 열고 영상 파일의 경로 획득하여 영상을 읽는다

4.2 MFC환경에서 화면에 영상 출력하기

MFC 환경에서 영상을 화면에 출력하기 단일 또는 다중 문서 응용 프로그램을 이용한 화면 출력 뷰 클래스 자체가 화면 출력을 위한 클래스 GUI가 복잡해질 수 있고 여러 영상을 동시에 출력하기 불편 별도의 윈도우 생성을 이용한 화면 출력 여러 영상을 동시에 출력하기 쉬움 별도의 윈도우 생성 코드 작성 필요. 한 번 구현 한 후 계속 활용 가능

MDI 응용프로그램 프로젝트 생성 다중문서 응용프로그램 구조 프로그램 이름: MDIImageViewer 프로젝트 설정 MFC응용프로그램, 다중 문서 응용 프로그램 MyImage.h헤더파일을 프로젝트에 추가 다중문서 응용프로그램 구조 뷰 클래스가

버튼의 ID를 MENU_VIEW_IMAGE로 수정 MDI 프로그램에서 화면 출력하기 ← 기본 편집 창 영상처리-화면출력 창을 생성 버튼의 ID를 MENU_VIEW_IMAGE로 수정

CMDIImageViewerDoc 클래스 & CMDIImageViewerView클래스 편집 영상을 파일로부터 읽는 작업 수행 OnMenuViewImage()함수 편집 MDIImageViewerDoc.cpp파일에 자동으로 추가 MDIImageViewerDoc.cpp에 헤더 추가

CMDIImageViewerDoc 클래스 & CMDIImageViewerView클래스 편집 CMDIImageViewerDoc.h에 CMyImage 클래스 멤버 변수 추가 CMDIImageViewerDoc 클래스 편집하기 LoadimageFromDialog함수를 통해 입력 영상 파일 읽기 읽어들인 m_image 멤버 변수에 할당. UpdateAllViewe()함수를 호출하여 입력 영상을 화면에 출력

MDI 프로그램에서 화면 출력하기 CMDIImageViewerDoc 클래스 & CMDIImageViewerView클래스 편집 실제 영상의 화면 출력을 담당하는 클래스 OnDraw()함수가 그리기를 수행 OnDraw()함수는 화면 갱신 이벤트에 의하여 자동적으로 호출 (UpdateAllViews()) : 화면이 다른 창에 의해 가려져 있을 때 다시 나타나는 경우 자동적으로 추가되어 있는 OnDraw()함수를 편집

CMDIImageViewerDoc 클래스 & CMDIImageViewerView클래스 편집 DrawImage() 함수 실제 영상 데이터를 출력하는 함수 OnDraw함수보다 앞선 위치에 작성 Wingdi.h에 선언되어 있는 StretchDIBits()함수 사용 비트맵 헤더 정보 (BITMAPINFO 구조체)를 만들어 픽셀 데이터, 화면 위치 정보 등과 함께 StretchDIBits()함수를 호출 BIRMAPINFO 구조체

CMDIImageViewerDoc 클래스 & CMDIImageViewerView클래스 편집 StretchDIBits()함수 영상의 크기를 맞추어 출력해준다 Device context (DC) 윈도우 운영체제에서 화면 출력이나 프린터 출력을 위한 장치의 그리기 속성에 대한 정보를 담은 구조체 운영체제에 의해 관리됨 프로그램 안에서 그리기작업을 수행하기 위해서는 운영체제로부터 디바이스 컨텍스트의 핸들 HDC를 받아와서 사용해야 한다, GetDC() or GerWindowDC()를 이용해 받아 올수 있다 디바이스 컨텍스트의 클래스 CDC가 주어지면 멤버변수 m_hDC를 사용할 수 있다. HDC핸들은 StretchDIBits()함수를 호출 할 때 매개변수로 넘겨주게 된다 CF) Device context (DC) 운영체제에서 화면 출력을 위한 장치의 그리기 속성에 대한 정보를 담은 구조체 운영체제에 의해 관리됨 프로그램 내에서 그리기 작업을 수행하려면 운영체제로부터 DC핸들 HDC를 받아와 사용 GetDC() or GerWindowDC() DC의 클래스 CDC를 이용하여 m_hDC 사용가능, StretchDIBits()함수의 매개변수로 넘겨 사용.

CMDIImageViewerDoc 클래스 & CMDIImageViewerView클래스 편집 회색조 영상의 출력 24비트 컬러가 아닌 경우 화면 출력을 위해 팔레트 정보 필요 회색조 영상은 (0,0,0) ~(255,255,255)색이 담긴 길이 256의 팔레트를 사용 팔래트를 BITMAPINFO구조체의 bmiColors변수에 대입하여 사용