기금넷 공식사이트 - 주식 지식 - Delphi의 캔버스가 너무 느리면 어떻게 해야 하나요?

Delphi의 캔버스가 너무 느리면 어떻게 해야 하나요?

이렇게 글쓰는게 느리지 않은게 이상하네요

캔버스가 느린 건 아니고, 이런 용도로 사용하는 방법이 아닙니다. 캔버스 그리기를 과소평가하지 마세요. 델파이 vcl에 캡슐화 이 방법이 느리다고 생각하시나요?

이미지 데이터가 이미 메모리에 있기 때문에 이미지 데이터를 스트림에 로드할 필요가 없습니다. 그냥 직접 조작하면 됩니다.

직접 작성해 주세요. 예: (복사하여 붙여넣기가 아닙니다!)

var

imageP1,imageP2:^TColor;

i:integer;

시작

Image1.Picture.Bitmap으로 시작

시작

PixelFormat:=pf32bit;

imageP1:=ScanLine[Height- 1];

end;

with Image2.Picture.Bitmap do

start

p>

PixelFormat:=pf32bit;

imageP2:=ScanLine[Height-1];

end;

for i:= 0 ~ ( Image2.Width * Image2.Height)-1 do

시작

if imageP2^ <> $FF00FF then

imageP1^:=imageP2^;

inc(imageP1);

inc(imageP2)

end;

image1.Refresh;

end;

달성된 효과는 위와 동일합니다. 전제는 두 이미지 이미지의 너비와 높이가 동일해야 하며 Bmp 이미지가 필요하다는 것입니다.

하지만 속도는 여러분이 작성한 것보다 절대적으로 NNNN배 빠릅니다.

포인터 사용법만 알면 제가 제시한 예제를 완벽하게 수행할 수 있습니다. 포인터를 사용하는 것이 가장 좋습니다. 포인터는 메모리에서 직접 작동하기 때문에 프로그램의 효율성을 크게 향상시킵니다.

vcl 캡슐화는 실제로 매우 좋지만 많은 초보자는 캡슐화의 원리에 대해 잘 알지 못한 채 Vcl을 무분별하게 사용합니다. Vcl.

예를 들어, 루프에서 일부 시각적 제어 방법을 사용하면 N번의 불필요한 다시 그리기가 발생합니다. (웃음! 느리지 않습니다. 이상하네요.) 따라서 델파이 애호가들은 언젠가 vcl에서 영양을 섭취해야 합니다. 델파이와 VC가 같은 수준에 있다는 것을 확인하세요