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을 쓰지 않고 프로토타입으로 영상처리 알고리즘을 테스트할땐
: 아주 요긴합니다.
:
: 윈도에선 되는군요, 맥에선 왜 안되는 걸까효??