googleAdsense_widever


c++ 영상처리 프로그램 & OpenCV Programing . Common

Visual C++와 OpenCV로 배우는 디지털 영상처리 - 강동중,하종은 - 인피니티북스

OpenCV 제대로 배우기

개리 로스트 브라드스키, 에이드리안 캘러 지음  황선규 역 |  번역서 |  2009년 09월 |  한빛미디어(주)








Bitmap.SetPixel
.NET Framework 2.0

해당 Bitmap에서 지정된 픽셀의 색을 설정합니다.

네임스페이스: System.Drawing
어셈블리: System.Drawing(system.drawing.dll)

public:void SetPixel (	int x, 	int y, 	Color color)
설정할 픽셀의 x 좌표입니다.
설정할 픽셀의 y 좌표입니다.
color 지정된 픽셀에 할당할 색을 나타내는 Color 구조체입니다.


setPixel을 사용하면 영상출력이 상당히 느리다.
윈도우 기반 장치 독립 비트맵 구조체 BITMAPINFO 를 사용.
BMP 파일의 영상헤드(BITMAPINFOHEADER)와 팔레트(RGBQUAD)정보를 포함하고 있음.
SetDIBitsToDevice 함수 이용.

소스 추가 : ImageProcessorView.cpp

CImageProccessorView::CImageProccessorView()
{
// TODO: add construction code here
height = width = 256;
int rwsize = (((width)+31)/32*4); //영상 폭은 항상 4바이트의 배수

BmInfo = (BITMAPINFO*)malloc(sizeof(BITMAPINFO)+256*sizeof(RGBQUAD));

BmInfo->bmiHeader.biBitCount=8;
BmInfo->bmiHeader.biClrImportant=256;
BmInfo->bmiHeader.biClrUsed=256;
BmInfo->bmiHeader.biCompression=0;
BmInfo->bmiHeader.biHeight=height;
BmInfo->bmiHeader.biPlanes=1;
BmInfo->bmiHeader.biSize=40;
BmInfo->bmiHeader.biSizeImage=rwsize*height;
BmInfo->bmiHeader.biWidth=width;
BmInfo->bmiHeader.biXPelsPerMeter=0;
BmInfo->bmiHeader.biYPelsPerMeter=0;

for(int i=0; i<256; i++) //palette number is 256
{
BmInfo->bmiColors[i].rgbGreen=BmInfo->bmiColors[i].rgbBlue=i;
BmInfo->bmiColors[i].rgbReserved=0;
}
}

CImageProccessorView::~CImageProccessorView()
{
free(BmInfo);
}



void CImageProccessorView::OnDraw(CDC* pDC)
{
CImageProccessorDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here

//배열을 위아래가 반전된 형태로 만든다. 원 영상(m_InImg)의 화면출력
for(int i=0; i<height; i++)
for(int j=0; j<width; j++) m_RevImg[i][j]=pDoc->m_InImg[height-i-1][j];

SetDIBitsToDevice(pDC->GetSafeHdc(),0,0,width,height,0,0,0,height,m_RevImg,BmInfo,DIB_RGB_COLORS);

// 처리한 결과영상(m_OutImg)의 화면출력을 위한 부분
for(i=0; i<height; i++)
for(int j=0; j<width; j++) m_RevImg[i][j]=pDoc->m_OutImg[height-i-1][j];

SetDIBitsToDevice(pDC->GetSafeHdc(),300,0,width,height,0,0,0,height,m_RevImg,BmInfo,DIB_RGB_COLORS);
}



* SetDIBitsToDevice 함수 설명
int SetDIBitsToDevice(
HDC hdc,  // DC에 대한 핸들
int XDest, // 출력할 영상 영역의 왼쪽 위 x좌표
int YDest, // 출력할 영상 영역의 왼쪽 위 y좌표
DWORD dwWidth,  // 영상의 가로폭(픽셀 단위)
DWORD dwHeight,  // 영상의 높이(픽셀 단위)
int XSrc,  // 출력할 소스영상의 왼쪽-아래 x좌표
int YSrc,  // 출력할 소스영상의 왼쪽-아래 y좌표
UINT uStartScan,  // 배열에서 출력할 첫 번째 스캔 라인
UINT cScanLines, // 출력할 스캔 라인의 수
CONST VOID *lpvBits,  // 영상 데이터(장치 독립 비트맵의 비트배열)
CONST BITMAPINFO *lpbmi, // 영상데이터의 비트맵 정보
UINT fuColorUse  // RGB 또는 팔레트 정보
);








덧글

댓글 입력 영역


공지

어서오십시오.
트위터 : @FCliver
기저심리학 : 네이버카페
카카오톡 : FCliver
페이스북 : Fredric Cliver

통계 위젯 (화이트)

01
50
288861

접속자 위치