검색결과 리스트
coding에 해당되는 글 35건
- 2010.10.25 Win32 API에서 영상처리를 위해 이미지로부터 픽셀 배열 얻어오기
- 2010.10.21 Android 입문자를 위한 Tutorial - 4. 라디오 버튼 2
- 2010.10.06 ACM-ICPC 2010년도 인터넷 예선 문제 - 1 . Three Bowling Pin
글
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 입문자를 위한 Tutorial - 4. 라디오 버튼
Mobile Programming/Android
2010. 10. 21. 14:51
<RadioGroup>
<RadioButton>
/>
<RadioButton>
/>
</RadioGroup>
class안이어도 메서드 밖에서는 findViewById등의 메서드의 사용이 불가함 !
만약 하단 소스에서 nameG와 imageG를 선언과동시에 FindViewById()를 호출한다면 프로그램이 맥없이 뻗는다..
아래 예제는 명화들을 출력하는 ImageView imageG 를 라디오버튼을 이용해 조작하는 간단한 프로그램.
라디오버튼 레이아웃 입력 형태를 숙지하고 확인하도록 하자.
자바 소스는 단순히 OnCheckedChanged를 오버라이드, 아이디 별로 해당 작업을 수행하기만 한다.
package geng.mm.jnu; import android.app.Activity; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.widget.ImageView; import android.widget.RadioGroup; import android.widget.TextView; public class radio extends Activity implements RadioGroup.OnCheckedChangeListener { TextView nameG; ImageView imageG; Drawable a1,a2,a3,a4,a5; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.formss); nameG = (TextView)findViewById(R.id.grimname); imageG = (ImageView)findViewById(R.id.grimpan); RadioGroup ColGroup = (RadioGroup)findViewById(R.id.grimgroup); ColGroup.setOnCheckedChangeListener(this); nameG = (TextView)findViewById(R.id.grimname); imageG = (ImageView)findViewById(R.id.grimpan); a1 = this.getResources().getDrawable(R.drawable.cgrim1); a2 = this.getResources().getDrawable(R.drawable.cgrim2); a3 = this.getResources().getDrawable(R.drawable.cgrim3); a4 = this.getResources().getDrawable(R.drawable.cgrim4); a5 = this.getResources().getDrawable(R.drawable.cgrim5); } @Override public void onCheckedChanged(RadioGroup group, int checkedId) { // TODO Auto-generated method stub switch(checkedId){ case R.id.grim11: imageG.setImageDrawable(a1); nameG.setText("모나리자"); break; case R.id.grim22: imageG.setImageDrawable(a2); nameG.setText("이삭줍는여인들"); break; case R.id.grim33: imageG.setImageDrawable(a3); nameG.setText("절규"); break; case R.id.grim44: imageG.setImageDrawable(a4); nameG.setText("아담의창조"); break; case R.id.grim55: imageG.setImageDrawable(a5); nameG.setText("별이빛나는밤에"); break; } } }
'Mobile Programming > Android' 카테고리의 다른 글
Android 입문자를 위한 Tutorial - 6. 커스텀 위젯 (0) | 2010.11.09 |
---|---|
Android 입문자를 위한 Tutorial - 5. ArrayList (0) | 2010.11.04 |
Android 입문자를 위한 Tutorial - 3. Layout (0) | 2010.09.28 |
Android 입문자를 위한 Tutorial - 2. Hello Android! (0) | 2010.09.28 |
Android 입문자를 위한 Tutorial - 1. 설치 및 환경설정 (2) | 2010.09.09 |
설정
트랙백
댓글
글
ACM-ICPC 2010년도 인터넷 예선 문제 - 1 . Three Bowling Pin
Programming/Algorithm
2010. 10. 6. 23:51
acm 홈페이지에서 문제가 없어졌네요 ;
파일 없는데 .. 인쇄해 둔 것만 있구..
혹시 이거 문제 올렸다고 저작권 같은 문제가 생기진 않겠죠 ? ' - ' ) ;;;
뭐 이미 예선 결과도 다 나오고 했으니까 .. 올려도 문제 없을거라 믿고 올립니다.
어쨌든 이 문제는 볼링 점수 계산기를 짜는겁니다.
전체 10 프레임에 , 기본적으로 한 프레임당 투구를 두번하죠.
기본적으로 쓰러트린 핀의 수만큼 점수가 올라갑니다.
단 , 스페어 처리시 (프레임의 첫 투구에서는 핀을 다 쳐내지 못했는데 두번째 투구에서 남은 모든 핀을 쳐내는 것)
해당 프레임이후 다음 투구까지의 점수가 + 됩니다.
스트라이크 처리시에는(프레임의 첫 투구에서 모든 핀을 쳐내는 것) 다음 두번의 투구까지의 점수가 +됩니다.
때문에 10번째 프레임에서 스페어 혹은 스트라이크가 나왔을때는 점수 계산을 위해 추가 투구가 필요합니다.
이게 기본 볼링룰이죠 ..
다만 이 문제에서는 볼링핀이 3개입니다.
보기 편하게 '/'로 각 프레임을 나눴을때
1 2 / 3 / 2 1 / 2 0 / 1 0 / 2 0 / 0 1 / 1 2 / 0 1 / 3 1 1
각 프레임의 점수는
6 / 6 / 5 / 2 / 1 / 2 / 1 / 3 / 1 / 5
따라서 최종 점수는
12 + 7 + 3 + 4 + 6 = 32
입력
입력의 첫째는 언제나 그렇듯 테스트케이스의 수( 1<= T <= 100 )를 입력합니다.
각 테스트 케이스의 첫 줄은 총 투구 횟수가 입력됩니다.
다음으로 그 투구 횟수만큼 각 투구 결과를 표기합니다. (위의 예에선 1 2 3 2 1 .... 3 1 1 )
출력
점수를 출력합니다.
단, 만약 핀은 3개인데 5개를 넘어뜨린다던가 하는 말도 안되는 입력 상황에서는 error를 출력합니다.
Problem A 였던만큼 가장 쉬운 문제였겠죠 ?
그냥.. 요구하는대로 짜면 됩니다.;;;;
그냥.. 요구하는대로 짜면 됩니다.;;;;
'Programming > Algorithm' 카테고리의 다른 글
ACM-ICPC 2010년도 O.T. 문제 2 - Delivery (2) | 2010.10.04 |
---|---|
ACM-ICPC 2010년도 O.T. 문제 1 - Ducci Sequence (0) | 2010.10.04 |
ACM-ICPC 2009년도 기출 _ Candy War (0) | 2010.10.01 |
암호 깨기 (Crypt Kicker) (0) | 2010.09.30 |
동맹 휴업 (Hartal) (0) | 2010.09.03 |