C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[28757] Re:[질문]이미지 자르기거나 돌리는법좀 가르쳐 주세요
조건일 [imgunill] 3033 읽음    2004-02-09 18:11
김유미 님이 쓰신 글 :
: 화상 카메라로 사진을 찍는 프로그램을 했는데요
: 사진 보면 가로가 길고 세로가 짧잖아요
: 전 명함 사진을 만들려고 하는거라서요...
: 그래서 이미지의 오른쪽을 자르게 하거나 아니면 사진을 돌릴수 없을까 해서요
: 컴퍼넌트는 자료실에 있는 TVideoCap 을 사용했어요

잘라내는 방법은 BitBlt(빗블릿) 또는 PatBlt(팻블릿)을 이용하시면 되구요...
돌리는 방법은.. 델파이 하던시절 작성한건지 어디서 얻은건지 기억이 안나는 함수가 있네요... cpp로 변환해서 사용하세요...
보시고 참고 하시면 문제해결 간단히 하실수 있으실 겁니다..
참고적으로 bitmap rotate연산의 가장 무식한 방법이므로 화상카메라 실시간 동영상을 회전 시키기에는 무리가 있을 것입니다.. 즐플하세요..

procedure TForm1.bmp_rotate( src, dst : TBitmap; Angle : Extended );
var
  c1x,c1y,c2x,c2y:integer;
  p1x,p1y,p2x,p2y:integer;
  radius,n:integer;
  alpha:extended;
  c0,c1,c2,c3:tcolor;
begin
//각도를 계산...
angle := (angle / 180) * pi;

// calculate the central points
c1x := src.width div 2;
c1y := src.height div 2;
c2x := dst.width div 2;
c2y := dst.height div 2;

// 총 Steps 수 계산...
if c2x < c2y then
   n := c2y
else
   n := c2x;
dec (n,1);

// 회전 시작...
  for p2x := 0 to n do begin
    for p2y := 0 to n do begin
      if p2x = 0 then
         alpha:= pi/2
      else
         alpha := arctan2(p2y,p2x);

      radius := round(sqrt((p2x*p2x)+(p2y*p2y)));
      p1x := round(radius * cos(angle+alpha));
      p1y := round(radius * sin(angle+alpha));
      c0 := src.canvas.pixels[c1x+p1x,c1y+p1y];
      c1 := src.canvas.pixels[c1x-p1x,c1y-p1y];
      c2 := src.canvas.pixels[c1x+p1y,c1y-p1x];
      c3 := src.canvas.pixels[c1x-p1y,c1y+p1x];

      dst.canvas.pixels[c2x+p2x,c2y+p2y]:=c0;
      dst.canvas.pixels[c2x-p2x,c2y-p2y]:=c1;
      dst.canvas.pixels[c2x+p2y,c2y-p2x]:=c2;
      dst.canvas.pixels[c2x-p2y,c2y+p2x]:=c3;
    end; //for
    application.processmessages
  end; //for
end;

// 사용방법...
procedure TForm1.bmpRotateClick(Sender: TObject);
var
  RAngle : Extended;
begin
  RAngle := StrToFloat(Edit1.Text);
  bmp_rotate(Image1.Picture.Bitmap,Image2.Picture.Bitmap, RAngle);
end;

+ -

관련 글 리스트
28744 [질문]이미지 자르기거나 돌리는법좀 가르쳐 주세요 김유미 1001 2004/02/09
34433     Re:[질문]이미지 자르기거나 돌리는법좀 가르쳐 주세요 AyanamiRei 1640 2004/02/09
28757     Re:[질문]이미지 자르기거나 돌리는법좀 가르쳐 주세요 조건일 3033 2004/02/09
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.