본문 바로가기
코스웨어/15년 스마트컨트롤러

20151125 - 권오민 - WinAPI 10일차

by 알 수 없는 사용자 2015. 11. 25.
728x90
반응형

API

이미지 데이터 처리

- 히스토그램

●소스 코딩

- 데이터처리는 다음과 같다.

////////////////////
  for (uiYCnt = 0; uiYCnt < YSCALE; ++uiYCnt)
  {
    
for (uiXCnt = 0; uiXCnt < XSCALE; ++uiXCnt)
    {
      SetPixel(MemDC, uiXCnt, YSCALE - uiYCnt, RGB(
        *(Vdata + (
3 * (uiYCnt*XSCALE + uiXCnt)) + 2),
        *(Vdata + (
3 * (uiYCnt*XSCALE + uiXCnt)) + 1),
        *(Vdata + (
3 * (uiYCnt*XSCALE + uiXCnt)) + 0)));

      ++uiHis1[Vdata[
3 * ((uiYCnt*XSCALE) + (uiXCnt)) + 0]]; 
      ++uiHis1[Vdata[3 * ((uiYCnt*XSCALE) + (uiXCnt)) + 1]];
      ++uiHis1[Vdata[
3 * ((uiYCnt*XSCALE) + (uiXCnt)) + 2]];
    }
  }
//////////////////////X축을 기준으로 라인 별로 그래프의 높이를 설정한다.
  uiMaxVal1 = 0;
  
for (uiXCnt = 0; uiXCnt < XGRAPH; ++uiXCnt)
  {
    uiHis1[uiXCnt] 
= uiHis1[uiXCnt] / 3;
    
if (uiMaxVal1 < uiHis1[uiXCnt])
    {
      uiMaxVal1 
= uiHis1[uiXCnt];
    }
  }
//////////////////////오차 줄이기
  for (uiXCnt = 0; uiXCnt < XGRAPH; ++uiXCnt)
  {
    uiHis1[uiXCnt] 
= (uiHis1[uiXCnt] * YGRAPH) / uiMaxVal1; 
  }

- <main.c> 첨부파일


1.main(히스토 그램).c


●결과(사진)






●결과(동영상)

Alpha

●Alpha

- 알파 값이란?

        - 투명한 색상을 변경할 색깔.

                - 크로마키

                - 특정한 색을 원하는 색으로 바꾼다.

                        - 특정한 색을 찾아야 한다.

●실습

- 칠판을 기준으로 진행한다.

- 칠판의 마스크 할 부분의 정보를 추출한다.

●소스 코딩

- 위의 정보를 바탕으로 다음과 같이 define를 한다.

#define MALPHA 168
#define GALPHA 20
#define HALPHA (MALPHA + GALPHA)
#define LALPHA (MALPHA - GALPHA)

- 2중 for문을 사용하여 memcpy를 대체한다.

        - 목표는 칠판으로 한다.

        - if문을 통해 원하는 값을 추려낼 수 있다.

for (uiYCnt = 0; uiYCnt < YSCALE; ++uiYCnt)
  {
    
for (uiXCnt = 0; uiXCnt < XSCALE; ++uiXCnt)
    {
      iCal 
= 3 * (uiYCnt*XSCALE + uiXCnt);  //중복되는 계산 코드
      //Vdata[3 * (uiYCnt*XSCALE + uiXCnt) + 0] = lpVHdr->lpData[3 * (uiYCnt*XSCALE + uiXCnt) + 0];
      Vdata[iCal + 0= *(lpVHdr->lpData + (iCal + 0));
      Vdata[iCal + 
1= *(lpVHdr->lpData + (iCal + 1));
      Vdata[iCal + 
2= *(lpVHdr->lpData + (iCal + 2));

      
if (HALPHA < Vdata[iCal + 0])
      {
        
continue;
      }
      
if (LALPHA > Vdata[iCal + 0])
      {
        
continue;
      }

      
if (HALPHA < Vdata[iCal + 1])
      {
        
continue;
      }
      
if (LALPHA > Vdata[iCal + 1])
      {
        
continue;
      }

      
if (HALPHA < Vdata[iCal + 2])
      {
        
continue;
      }
      
if (LALPHA > Vdata[iCal + 2])
      {
        
continue;
      }  

       //위의 if문을 전부 통과했다는 것은 마스크 할 부분이라는 뜻이다.
      Vdata[iCal + 0] = 255;
      Vdata[iCal + 1] = 0;
      Vdata[iCal + 2] = 0;

    }
  }

- 결과

        - GAP의 값 조절에 의해서 더욱 선명하게 구분할 수 있다.

●비트맵 씌우기

- 칠판의 바탕을 기준으로 칠판을 준비된 비트맵으로 대체한다.



728x90