GDI+를 이용한 회전 3가지....

31433 
Created at 2006-12-27 00:22:09 
392   0   0   0  
GDI+를 이용한 회전을 사용할 경우의 잇점부터 말씀드리겠습니다.

우선 코드 길이가 짧습니다. ( 코딩시간이 줄어들죠... ^^.)
또한 보간모드가 기본적으로 포함되어 있습니다. ( 이미지 보간 함수를 직접 만든다면 엄청난 수학과 싸우셔야 됩니다. )
회전시에는 보간모드를 조절하여 좋은 퀄리티의 보간모드를 사용하시면 더 좋습니다.( SetInterpolationMode() 함수 사용 )

이 두가지 잇점만으로도 충분히 사용할 가치가 있다고 생각합니다.(어디까지나 제 주관입니다 --;; 물론 안 쓰셔도 무방합니다.)



제가 사용하는 세가지 방법을 적어보겠습니다.... ^^

방법 1
Image Class 에 있는 RotateFlip( RotateFlipType rotateFlipType) 함수를 사용하시면 Image 객체 자체를 회전 시킬 수 있습니다.

다만 이를 이용해서는 정해진 각만 변환이 가능합니다. 또한, 미러 기능을 이용하실 수도 있습니다.

rotateFlipType은 아래와 같은 종류가 있습니다.
RotateNoneFlipNone   Specifies no rotation and no flipping. 
Rotate90FlipNone         Specifies a 90-degree rotation without flipping. 
Rotate180FlipNone      Specifies a 180-degree rotation without flipping. 
Rotate270FlipNone      Specifies a 270-degree rotation without flipping. 
RotateNoneFlipX           Specifies no rotation and a horizontal flip. 
Rotate90FlipX                Specifies a 90-degree rotation followed by a horizontal flip. 
Rotate180FlipX             Specifies a 180-degree rotation followed by a horizontal flip. 
Rotate270FlipX             Specifies a 270-degree rotation followed by a horizontal flip. 
RotateNoneFlipY          Specifies no rotation and a vertical flip. 
Rotate90FlipY               Specifies a 90-degree rotation followed by a vertical flip. 
Rotate180FlipY             Specifies a 180-degree rotation followed by a vertical flip. 
Rotate270FlipY             Specifies a 270-degree rotation followed by a vertical flip. 
RotateNoneFlipXY        Specifies no rotation, a horizontal flip, and then a vertical flip. 
Rotate90FlipXY             Specifies a 90-degree rotation followed by a horizontal flip and then a vertical flip. 
Rotate180FlipXY           Specifies a 180-degree rotation followed by a horizontal flip and then a vertical flip. 
Rotate270FlipXY           Specifies a 270-degree rotation followed by a horizontal flip and then a vertical flip. 

간단한 예제를 보이자면...
 Image img("c: est.bmp")
Graphics gx(hDC);
gx.DrawImage(&img, 0, 0);
img. RotateFlip( Rotate180FlipX );
gx.DrawImage(&img, 0, 0);




이 방법이 아닌 각도를 조절하시고 싶으시다면....
Graphics Class 를 사용하셔야 됩니다.

방법 2
    Graphics 객체를 생성하신 후 RotateTransform()과 TranslateTransform()과 DrawImage() 함수를 사용하셔야 됩니다.

    int ix, iy;
    Bitmap bmp(L"c: est.bmp");
    Bitmap tempbmp(bmp.GetWidth(), bmp.GetHeight(), PixelFormat24bppRGB);
    ix = int(bmp.GetWidth() / (-2.0));
    iy = int(bmp.GetHeight() / (-2.0));
    Graphics gx(hDC)
    Graphics tempgx(&tempbmp);
    tempgx.RotateTransform(50);
    tempgx.TranslateTransform(REAL(-ix), REAL(-iy), MatrixOrderAppend);
    Point dest[3] = {Point(ix, iy), Point(ix+bmp.GetWidth(), iy), Point(ix,iy+bmp.GetHeight())};
    tempgx.DrawImage(&bmp, dest, 3, 0, 0, bmp.GetWidth(), bmp.GetHeight(), UnitPixel);
    gx.DrawImage(&tempbmp, 100, 100);

이런 정도로 쓰시면 되겠네요....



방법 3
    Graphics 객체를 생성하신 후 DrawImage() 함수를 사용하셔야 됩니다.
    Status DrawImage( Image* image,
                                        const Point* destPoints,                         // Point[3]
                                        INT count,                                                  //  3
                                        INT srcx,
                                        INT srcy,
                                        INT srcwidth,
                                        INT srcheight,
                                        Unit srcUnit,                                              // UnitPixel
                                        ImageAttributes* imageAttributes,       // NULL
                   &nBsp;                    DrawImageAbort callback,                    // NULL
                                        VOID* callbackData  );                            // NULL

    여기서 제일 중요한 부분이 destPoints 의 값을 채워주는 부분입니다.
    Point[3] 의 값을 채워주면 이미지를 회전 시킬 수가 있습니다.
    세 포인트 값의 계산은 님이 함수를 만드셔서 쓰시면 편하실겁니다. ^^

     Bitmap bmp1(L"c:1.bmp"); // 원본 이미지
    Graphics gx(hDC);
     gx.DrawImage(&bmp, 0, 0); // 회전 전 그리기

    Point destPoints[3] = { Point(LeftTopX, LeftTopY), Point(RightTopX, RightTopY), Point(LeftBottomX, LeftBottomY) )           // 변환될 좌표 만들어주기
    gx.DrawImage(bmp1,desPoints, 3,0,0,bmp1.GetWidth(),bmp1.GetHeight(), UnitPixel, NULL, NULL, NULL );                    // 회전 후 그리기

Point 값 채우는 함수는 너무 이식성 없게 만들어놔서 붙여놓기가 좀 그렇네요. --;
꼭 필요하신 분이 계시다면 손을 좀 봐서 올려놓겠습니다.


이상 제가 회전할 때 사용하는 방법이었습니다...

Tags: GDI+ 윈도우즈 Share on Facebook Share on X

◀ PREVIOUS
MFC의 GDI/GDI+ 리소스 누수 현상
▶ NEXT
VC++ 6.0 에서 GDI+ 사용하기..
  Comments 0
Login for comment
SIMILAR POSTS

VC++ 6.0 에서 GDI+ 사용하기.. (created at 2006-12-27)

MFC의 GDI/GDI+ 리소스 누수 현상 (created at 2006-12-27)

간단히 WIN32에서 MFC의 메모리 누수 체크하는 방법 (created at 2006-12-27)

MFC의 TRACE() 출력 빼먹는 현상 (created at 2006-12-27)

모달리스 다이얼로그 와 메모리 리크(Leaks) (created at 2006-12-27)

GetDC()의 메모리 누수 막기 (created at 2006-12-27)

VC 에서 자동으로 빌드 넘버 증가하기 (created at 2006-12-28)

Internet Explorer가 자주 비정상 종료 할때 (created at 2006-12-29)

UTF-8로 파일 저장하기 (created at 2006-12-22)

버퍼 오버 플로우 공격과 DEP (created at 2007-01-24)

DEP 기능 비활성화 (created at 2007-01-24)

윈도우 버전 알아내는 함수 (created at 2007-01-25)

mdb 파일의 암호깨기 (created at 2007-01-25)

WinGate 깔았더니 블루스크린이 떠요 (created at 2007-01-25)

MSN Live Messenger가 동작이 안되요 (created at 2007-01-26)

네임드 커널 오브젝트를 사용한 중복 실행 방지법 (created at 2007-01-26)

태스크 바에서 프로그램(윈도우) 제목 숨기기 (created at 2007-01-26)

태스크 바를 없애버리고 싶다 (created at 2007-01-26)

버튼으로 해당 윈도우 종료하기 (created at 2007-01-26)

리스트박스 엔터처리 (created at 2007-01-26)

뷰의 배경색 바꾸기 (created at 2007-01-26)

대화상자에 비트맵 올리기 (created at 2007-01-26)

다이얼로그 리소스대로 폼뷰 크기 설정하기 (created at 2007-01-26)

CD, 플로피등의 디스크 삽입 자동 판단루틴 (created at 2007-01-26)

키보드로 마우스 커서 움직이기 (created at 2007-01-26)

파일 등록정보 보여주기 (created at 2007-01-26)

여러가지 시스템 종료 기법 (created at 2007-01-26)

작업관리자에서 윈도우 감추기 (created at 2007-01-26)

Windows95/98 암호 알아내기 (created at 2007-01-28)

마우스 커서 모양바꾸기 (created at 2007-01-28)

OTHER POSTS IN THE SAME CATEGORY

MSN Live Messenger가 동작이 안되요 (created at 2007-01-26)

설치형 블로그 VS 가입형 블로그 (created at 2007-01-26)

WinGate 깔았더니 블루스크린이 떠요 (created at 2007-01-25)

mdb 파일의 암호깨기 (created at 2007-01-25)

윈도우 버전 알아내는 함수 (created at 2007-01-25)

USB 장치 연결/연결해제 이벤트 처리하기 (created at 2007-01-25)

버퍼 오버 플로우 공격과 DEP (created at 2007-01-24)

Internet Explorer가 자주 비정상 종료 할때 (created at 2006-12-29)

VC 에서 자동으로 빌드 넘버 증가하기 (created at 2006-12-28)

네이버 검색엔진에 높은순위로 등록되는 방법 (created at 2006-12-27)

GetDC()의 메모리 누수 막기 (created at 2006-12-27)

모달리스 다이얼로그 와 메모리 리크(Leaks) (created at 2006-12-27)

MFC의 TRACE() 출력 빼먹는 현상 (created at 2006-12-27)

간단히 WIN32에서 MFC의 메모리 누수 체크하는 방법 (created at 2006-12-27)

VC++ 6.0 에서 GDI+ 사용하기.. (created at 2006-12-27)

MFC의 GDI/GDI+ 리소스 누수 현상 (created at 2006-12-27)

JSP 페이지 이동 4가지 방법 및 특성 (created at 2006-12-26)

기념일계산,날짜계산해서....^^; 앤에게 사랑받으시길..... (created at 2006-12-22)

자바스크립트로 만든 빙고 게임 (created at 2006-12-22)

현재달의 첫째날 , 마지막날 (날짜,일자) 구하기 (created at 2006-12-22)

JPG 저장된 DB 이미지 JSP로 보여주기 (created at 2006-12-22)

스크립트 디버거 (created at 2006-12-22)

수많은 체크박스 중 몇개 체크했는지 확인 (created at 2006-12-22)

가상디스크 만들기 (created at 2006-12-22)

RSS 수집당하는 법 (created at 2006-12-22)

프린팅 하기(IE 전용) (created at 2006-12-22)

textbox의 입력문자 제어하기(영문/한글) (created at 2006-12-22)

폼메일 예제 (created at 2006-12-22)

include 집중해부 (created at 2006-12-22)

한글 처리 (created at 2006-12-22)

UPDATES

글루코사민 vs. 콘드로이친: 무엇이 더 나은 관절 건강 보조제일까? (created at 2024-04-22)

광주 5·18 민주화운동 알린 테리 앤더슨 前 AP 기자 (created at 2024-04-22)

햄과 소세지가 우리 몸에 일으키는 부작용 (updated at 2024-04-22)

콘드로이친의 염증 감소효과 (updated at 2024-04-22)

코사민 DS - 글루코사민+콘드로이친 복합물이 함유된 퇴행성 관절 건강보조제 (updated at 2024-04-22)

삼겹살 먹을때 환상조합 (created at 2024-04-22)

일본 여중생의 특이한 취향 (created at 2024-04-22)

우리가 먹는 약물이 바꿔버린 생태계 (created at 2024-04-21)

일본에서 그린 상상속의 사무직과 현실속의 사무직 (updated at 2024-04-21)

북한 미대생들이 그린 북한 최고존엄 김정은 (created at 2024-04-21)

입사 후 1년도 되지 않은 회사에서 구조조정에 의한 퇴직 불응에 따른 해고 처리시 대응 가능한 방법 (updated at 2024-04-20)

한고은님의 옛날 사진 (updated at 2024-04-20)

소녀대 - Bye Bye Girl (updated at 2024-04-13)

대한민국 날씨 근황 (created at 2024-04-13)

성일종 인재육성 강조하며 이토 히로부미 언급 - 인재 키운 선례? (updated at 2024-04-13)

일제강점기가 더 살기 좋았을지도 모른다는 조수연 국민의힘 후보 - 친일파? (updated at 2024-04-13)

Marshall Ha님의 샤오미 SU7 시승기 - 테슬라의 일론 머스크님이 긴장할만한 느낌 (updated at 2024-04-09)

윙크하는 귀염둥이 반려견들 (created at 2024-04-08)

달콤 살벌한 고백 (created at 2024-04-08)

북한 최정예 공수부대 훈련 모습 (updated at 2024-04-02)

맛있었던 친구 어머니의 주먹밥이 먹고 싶어요 (created at 2024-04-02)

자리 마음에 안든다고 6급 공무원 패는 농협 조합장 (created at 2024-03-26)

85세 딸 짜장면 사주는 102세 어머니 (created at 2024-03-26)

1990년대 감각파 도둑 (created at 2024-03-26)

치매에 걸린 69살의 브루스 윌리스가 전부인 데미무어를 보고 한 말 (updated at 2024-03-22)

경제는 대통령이 살리는 것이 아닙니다 라던 윤석열대통령 - 상황 안좋아지자 여러 전략을 펼쳤지만, 부작용 속출했던 2024년의 봄 (updated at 2024-03-13)

극빈의 생활을 하고 배운것이 없는 사람은 자유가 뭔지도 모를 뿐 아니라 왜 개인에게 필요한지에 대한 필요성을 못느낀다는 윤석열 대통령 (updated at 2024-03-08)

조선일보를 안본다는 사람들이 말하는 그 이유 - 천황폐하, 전두환 각하, 김일성 장군 만세? (created at 2024-03-07)

광폭타이어를 장착하면 성능이 좋아질거라는 착각 (updated at 2024-03-03)

면허시험장에서 면허갱신하면 하루만에 끝나나? (updated at 2024-03-03)