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

FreePascal Q&A
[67] Re:Re:Re:라자루스에서 Pixels[] 메써드 안먹나요?
MarunGuy [marunguy] 2976 읽음    2012-09-27 14:12
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[] 메써드 안먹나요? 제갈볼 2844 2012/09/14
65     Re:라자루스에서 Pixels[] 메써드 안먹나요? 김도완 2854 2012/09/26
62     Re:라자루스에서 Pixels[] 메써드 안먹나요? H-S Kim 2878 2012/09/16
63         Re:Re:라자루스에서 Pixels[] 메써드 안먹나요? 제갈볼 3980 2012/09/17
67             Re:Re:Re:라자루스에서 Pixels[] 메써드 안먹나요? MarunGuy 2976 2012/09/27
68                 Re:Re:Re:Re:라자루스에서 Pixels[] 메써드 안먹나요? 제갈볼 2850 2012/10/05
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.