검색결과 리스트
코딩에 해당되는 글 14건
- 2010.10.25 Win32 API에서 영상처리를 위해 이미지로부터 픽셀 배열 얻어오기
- 2010.10.19 Android 개발 Tip - 3. Landscape layout
- 2010.09.28 Android 입문자를 위한 Tutorial - 3. Layout
글
Win32 API에서 영상처리를 위해 이미지로부터 픽셀 배열 얻어오기
Mobile Programming/Windows Mobile
2010. 10. 25. 21:19
먼저 대단히 좋은 참고가 된 지식인 유저분과, 이 지식인을 찾기 위해 함께 고생해주신 우리 06학번 오빠한테 감사하다는 말씀을!
http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040101&docId=67833701&qb=aGJpdG1hcCDtlL3shYAg7Ja77Ja064K06riw&enc=utf8§ion=kin&rank=1&search_sort=0&spq=0&pid=gKSisv331xCsscnLn1Vssv--272669&sid=TMVVR@dHxUwAAGI6EQQ
윈모는 아니지만, 모체가 되는 API에 대해 글 하나 올리려합니다 ㅋ
그동안 영상처리를 위해 픽셀을 받아오는 건 그냥 와인라벨하던 프로젝트의 솔루션 기본 파츠를 그냥 그대로 들고오던거라 어떻게 얻어오는지 전혀 몰랐습니다.
지능시스템을 위해서 영상처리가 필요했는데 , 역시 픽셀을 얻어오는 것이 선행되어야 합니다.
DDB(Device Dependent Bitmap)는 처리속도가 낮고 배열로 취급하기가 어려워
DIB 이미지에서 픽셀배열을 얻어오는편이 편하다고 합니다.
1차원 배열을 얻어오는 점이 아직 문제가 되긴 합니다만 ,
어쨋거나 DIB에서 픽셀배열을 얻어오는데 필요한 구조체는
1. DIBSECTION
2. RGBTRIPLE (여기에 RGB값이 들어있습니다)
입니다 .
#define HBYTES(w, b) ((((w) * (b) + 31) & ~31) / 8) hBitmap = (HBITMAP)LoadImage(NULL, Path, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION); DIBSECTION dib; GetObject(hBitmap, sizeof(DIBSECTION), &dib); DWORD cbHBytes = HBYTES(dib.dsBmih.biWidth, dib.dsBmih.biBitCount);//cbhbyte : 수평바이트수 if(dib.dsBmih.biBitCount == 24) {//RGB데이터일때만 int im_Height = dib.dsBmih.biHeight; //DIB는 Y좌표가 상위로 갈수록 +. 따라서 높이 - 정상좌표가 바뀐 역방향좌표. int p = (dib.dsBmih.biWidth * (im_Height-550)) + 270; int x = p % dib.dsBmih.biWidth; int y = p / dib.dsBmih.biWidth; RGBTRIPLE* p1 = (RGBTRIPLE*)((LPBYTE)dib.dsBm.bmBits + y * cbHBytes) + x; p= p; }
DIB는 Y좌표가 상위로 갈수록 증가한다는 사실을 유의합니다.
먼저 얻어온 path에 따라서 이미지를 메모리에 로드하고, 그 핸들을 저장합니다.
그리고 핸들을 이용해서 DIBSECTION의 정보 초기화,
24비트(RGB , 8비트-255까지니까-씩.)일때만 p로 픽셀위치를 얻어오고 RGBTRIPLE을 이용해 그 RGB값을 얻어옵니다.
이를 응용해서 배열로 받아오는 함수를 작성하면,
RGB_Trip ** makeRGB(DIBSECTION dib,int * height, int * width){ *height = dib.dsBmih.biHeight; *width = dib.dsBmih.biWidth; RGB_Trip ** RGBImage = new RGB_Trip*[*height]; for(int i =0; i < *height; i++){ RGBImage[i] = new RGB_Trip[*width]; } DWORD cbHBytes = HBYTES(dib.dsBmih.biWidth, dib.dsBmih.biBitCount);//cbhbyte : 수평바이트수 if(dib.dsBmih.biBitCount == 24) {//RGB데이터일때만 int im_Height = dib.dsBmih.biHeight; //DIB는 Y좌표가 상위로 갈수록 +. 따라서 높이 - 정상좌표가 바뀐 역방향좌표. //int p = (dib.dsBmih.biWidth * (im_Height-550)) + 270; for(int i = 0; i < *height; i++){ for(int j = 0; j < *width; j++){ int p = dib.dsBmih.biWidth*(im_Height-i)+j; int x = p % dib.dsBmih.biWidth; int y = p / dib.dsBmih.biWidth; RGBTRIPLE* p1 = (RGBTRIPLE*)((LPBYTE)dib.dsBm.bmBits + y * cbHBytes) + x; RGBImage[i][j] = p1; }//j } }//if return RGBImage; }
설정
트랙백
댓글
글
Android 개발 Tip - 3. Landscape layout
Mobile Programming/Android Tip
2010. 10. 19. 14:32
수평으로 단말기가 놓여졌을때 원하는 레이아웃을 따로지정할수있다.
이때는 반드시 res 폴더에 layout-land폴더를 만들고, 수평 xml파일과 같은 이름으로 지정해 만들어주어야 한다.
'Mobile Programming > Android Tip' 카테고리의 다른 글
Android 개발 Tip - 6. 이클립스 로그캣이 맛이갔어요! (2) | 2010.11.15 |
---|---|
Android 개발 Tip - 5. GestureListener (0) | 2010.11.11 |
Android 개발 Tip - 4. 키보드 숨기기 , Edit 제한 넣기 (0) | 2010.10.21 |
Android 개발 Tip - 2. MenuItem (0) | 2010.10.19 |
Android 개발 Tip - 1. 갤러리에서 Image Select (0) | 2010.10.13 |
설정
트랙백
댓글
글
Android 입문자를 위한 Tutorial - 3. Layout
Mobile Programming/Android
2010. 9. 28. 17:21
저번 포스팅에서 LinearLayout이라는 생소한 단어를 봤죠.
자세한 설명을 배제하고 포스팅을 마쳤는데 ,
이번에 Layout에 관한 간단한 공부를 해봅시다.
Layout은 어느정도 짐작하고 계시겠지만 위젯(버튼,텍스트뷰,에디트박스 등등)등을 배치하는 큰 규칙입니다.
Layout은 총 5가지가 있습니다 .
1. Linear Layout
2. Relative Layout
3. Absolute Layout
4. Frame Layout
5. Table Layout
2. Relative Layout
3. Absolute Layout
4. Frame Layout
5. Table Layout
Absolute Layout은 절대좌표로 위치를 지정하는 레이아웃입니다.
그런데 이런 방식은 단말기의 기종에따라,, 해상도에따라 완전히 불안정하기 때문에 현재는 deprecated 선언되었습니다.
따라서 자세한 설명은 배제합니다!
'Mobile Programming > Android' 카테고리의 다른 글
Android 입문자를 위한 Tutorial - 6. 커스텀 위젯 (0) | 2010.11.09 |
---|---|
Android 입문자를 위한 Tutorial - 5. ArrayList (0) | 2010.11.04 |
Android 입문자를 위한 Tutorial - 4. 라디오 버튼 (2) | 2010.10.21 |
Android 입문자를 위한 Tutorial - 2. Hello Android! (0) | 2010.09.28 |
Android 입문자를 위한 Tutorial - 1. 설치 및 환경설정 (2) | 2010.09.09 |