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

FreePascal Q&A
[68] Re:Re:Re:Re:라자루스에서 Pixels[] 메써드 안먹나요?
제갈볼 [bemorebf] 2841 읽음    2012-10-05 09:19
와우 마룬거이님 감사합니다~

맥오에스텐은 코코아가 기본 위젯입니다.

카본은 과거 클래식을 호환하기 위해 만들어진 GUI 이고요.

과거 라자루스가 카본기반으로 개발된 흔적인가요?

카본은 현재 안쓰이고 있는거로 아는데 ..

여하튼 감사!! 해결책이 보이네요 ~

저도 오픈소스 프로젝트에 참여해야 하나요~

MarunGuy 님이 쓰신 글 :
: LCL 소스를 보니 맥에서 cocoa 위젯을 사용한다면 구현이 안 되어 있는 것 같네요.
:
: Pixels 프로퍼티가 SetPixel, GetPixel 메쏘드로 맵핑됩니다.
: 소스를 쭈욱 따라가다보면 DCSetPixel, DCGetPixel 인터페이스를 사용하게 되어 있습니다.
:
: DCSetPixel, DCGetPixel 는 widget 별로 구현됩니다. win32, gtk, qt, cocoa, carbon...
: 소스는 보통 설치폴더\lcl\interfaces 폴더 밑에 widget 별로 존재합니다.
:
: 어쨌든, win32, gtk, qt 등은  DCSetPixel, DCGetPixel 인터페이스가 구현되어 있는데
: 아래처럼 cocoa 는 구현이 안 된 상태로 비어 있네요.
:
procedure TCocoaWidgetSet.DCSetPixel(CanvasHandle: HDC; X, Y: integer; AColor: TGraphicsColor);
: begin
: 
: end;

:
: 아, carbon 쪽은 구현이 되어있네요.
:
procedure TCarbonWidgetSet.DCSetPixel(CanvasHandle: HDC; X, Y: integer;
:   AColor: TGraphicsColor);
: begin
:   {$IFDEF VerboseObject}
:     DebugLn('TCarbonWidgetSet.DCSetPixel DC: ' + DbgS(CanvasHandle) + ' X: ' + DbgS(X) + ' Y: ' + DbgS(Y) + 'Color: ' + DbgS(AColor));
:   {$ENDIF}
: 
:   if not CheckDC(CanvasHandle, 'DCSetPixel') then Exit;
: 
:   TCarbonDeviceContext(CanvasHandle).SetPixel(X, Y, AColor);
: end;

:
: 맥 사용자도 아니고 써 본적도 없어서 cocoa 기본 widget 인지, carbon 이 기본 widget 인지 모르겠네요.
:
: LCLWidgetType 을 옵션에서 지정하면 Widget 을 바꿀 수 있는 것 같습니다.
: 아래 링크를 참조해보세요.
: http://wiki.lazarus.freepascal.org/IDE_Window:_Compiler_Options
:
: 제갈볼 님이 쓰신 글 :
: : H-S Kim 님이 쓰신 글 :
: : : Win 7 x64
: : : Lazarus 1.1
: : : FPC 2.7.1에서는 되네요...
: : : 무슨 차이가 있는지는 모르겠지만요...
: : :
: : : 속도는 많이 느려서 사용하기는 좀 그렇네요
: : :
: : : 사족으로,
: : :    i:=1, j:=1 을 i:0, j:=0 으로 해야 다 복사가되는군요
: : :
: : :
: : : procedure TForm1.Button1Click(Sender: TObject);
: : : var
: : :   i, j: integer;
: : : begin
: : : 
: : :   for i:=0 to image1.Width-1 do begin
: : :     for j:=0 to image1.Height-1 do begin
: : :       image2.Canvas.Pixels[i, j]:=  image1.Canvas.Pixels[i, j];
: : :     end;
: : :   end;
: : : 
: : :   showMessage('Good~ !');
: : : 
: : : //  image2.Refresh;
: : : end; 
: : : 

: :
: : 네 그건 알고 있습니다.
: :
: : Pixels[]; 메써드는 속도는 느리지만 Scanline을 쓰지 않고 프로토타입으로 영상처리 알고리즘을 테스트할땐
: : 아주 요긴합니다.
: :
: : 윈도에선 되는군요, 맥에선 왜 안되는 걸까효??

+ -

관련 글 리스트
61 라자루스에서 Pixels[] 메써드 안먹나요? 제갈볼 2841 2012/09/14
65     Re:라자루스에서 Pixels[] 메써드 안먹나요? 김도완 2849 2012/09/26
62     Re:라자루스에서 Pixels[] 메써드 안먹나요? H-S Kim 2871 2012/09/16
63         Re:Re:라자루스에서 Pixels[] 메써드 안먹나요? 제갈볼 3974 2012/09/17
67             Re:Re:Re:라자루스에서 Pixels[] 메써드 안먹나요? MarunGuy 2969 2012/09/27
68                 Re:Re:Re:Re:라자루스에서 Pixels[] 메써드 안먹나요? 제갈볼 2841 2012/10/05
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.