개요
----현재 많은 학습 소프트웨어와 게임 CD에서 다양한 내용을 자주 볼 수 있습니다.
그래픽 디스플레이 기술은 움직임, 인터레이스, 빗방울 모양, 블라인드, 빌딩 블록 쌓기 및 기타 그래픽 디스플레이 방법을 사용하여 그림을 청중에게 더욱 생생하고 매력적으로 만듭니다. 이 기사에서는 Delphi에서 다양한 그래픽 디스플레이 기술을 구현하는 방법을 살펴보겠습니다.
기본 원리
----Delphi에서는 이미지를 표시하는 것이 매우 간단합니다. 양식에서 TImage 구성 요소를 정의하고 그림 속성을 설정한 다음 유효한 .ICO, .BMP, .EMF 또는 .WMF 파일을 선택하고 로드하면 됩니다. 그러면 선택한 파일이 TImage 컴포넌트에 표시됩니다. 하지만 이는 그래픽을 직접 형태로 보여줄 뿐, 전혀 스킬이 없습니다. 그래픽 디스플레이에 고유한 효과를 적용하려면 다음 단계를 따르세요.
----TImage 구성 요소를 정의하고 먼저 TImage 구성 요소에 표시할 그래픽을 로드합니다. 즉, 디스크의 그래픽 콘텐츠를 그래픽 캐시로 메모리에 로드합니다.
----TImage 구성 요소의 그래픽과 동일한 크기로 새 비트맵 객체를 만듭니다.
----캔버스의 CopyRect 기능을 사용하여(한 캔버스의 직사각형 영역을 다른 캔버스의 직사각형 영역으로 복사) 기술을 사용하고 동적으로 모양을 만듭니다.
파일 내용을 비트맵으로 변환한 다음 비트맵을 양식에 표시합니다.
----구현 방법
다양한 그래픽 표시 기술이 아래에 소개되어 있습니다.
1. 밀고 당기는 효과
표시되는 그래픽은 상하좌우 방향에서 화면으로 끌어당겨지며 동시에 화면의 원래 그래픽이 가려집니다. 이 효과는 네 가지로 나눌 수 있습니다.
풀업, 풀다운, 왼쪽 풀, 오른쪽 풀의 세 가지 유형이 있지만 풀업 효과를 예로 들면 원리는 비슷합니다.
원리: 먼저 임시 그래픽의 첫 번째 가로선을 표시할 비트맵의 마지막 가로선으로 이동한 다음 임시 그래픽의 처음 두 개의 가로선을 표시할 마지막 두 개의 비트맵으로 이동한 다음 표시합니다. 모든 그래픽 데이터가 이동할 때까지 처음 3개와 처음 4개를 이동합니다. 이동 과정에서 표시된 비트맵이 아래에서 위로 떠서 풀업 효과를 얻는 것을 볼 수 있습니다.
프로그램 알고리즘:
PROcedure TForm1.Button1Click(Sender: TObject);
var
newbmp: TBitmap;
i,bmpheight,bmp폭:정수;
시작하다
newbmp:= TBitmap.Create;
newbmp.Width:=image1.Width;
newbmp.Height:=image1.Height;
bmheight:=image1.높이;
bmp폭:=image1.Width;
i:=0에서 bmpheight까지 수행
시작하다
newbmp.Canvas.CopyRect(Rect
(0,bmpheight-i,bmp폭,bmheight),
이미지1.캔버스,
직사각형(0,0,bmp폭,i));
form1.Canvas.Draw(120,100,newbmp);
끝;
newbmp.free;
끝;
2. 수직 엇갈린 효과
원리: 표시할 그래픽을 두 부분으로 분할합니다. 홀수 스캔 라인은 위에서 아래로 이동하고, 짝수 스캔 라인은 아래에서 위로 이동하며 두 가지가 동시에 수행됩니다. 화면을 보면 상단과 하단에 나타나는 밝은 그래픽이 완전히 선명해질 때까지 화면 중앙을 향해 이동하는 것을 볼 수 있습니다.
프로그램 알고리즘:
절차 TForm1.Button4Click(Sender: TObject);
var
newbmp:TBitmap;
i,j,bmpheight,bmp폭:정수;
시작하다
newbmp:= TBitmap.Create;
newbmp.Width:=image1.Width;
newbmp.Height:=image1.Height;
bmheight:=image1.높이;
bmp폭:=image1.Width;
나는:=0;
내가 < =bmpheight 하는 동안
시작하다
j:=i;
j>0인 동안
시작하다
newbmp.Canvas.CopyRect(Rect(0,j-1,bmpwidth,j),
이미지1.캔버스,
Rect(0,bmpheight-i+j-1,bmp너비,bmpheight-i+j));
newbmp.Canvas.CopyRect(Rect
(0,bmheight-j,bmp폭,bmheight-j+1),
이미지1.캔버스,
Rect(0,ij,bmp폭,i-j+1));
j:=j-2;
끝;
form1.Canvas.Draw(120,100,newbmp);
나는:=i+2;
끝;
newbmp.free;
끝;
3. 수평 시차 효과
원리: 두 그룹으로 나누어진 그래픽이 각각 왼쪽과 오른쪽 끝에서 화면 안으로 이동한다는 점을 제외하면 수직 인터레이스 효과와 동일한 원리입니다.
프로그램 알고리즘:
절차 TForm1.Button5Click(Sender: TObject);
var
newbmp:TBitmap;
i,j,bmpheight,bmp폭:정수;
시작하다
newbmp:= TBitmap.Create;
newbmp.Width:=image1.Width;
newbmp.Height:=image1.Height;
bmheight:=image1.높이;
bmp폭:=image1.Width;
나는:=0;
내가 < =bmpwidth 하는 동안
시작하다
j:=i;
j>0인 동안
시작하다
newbmp.Canvas.CopyRect(Rect(j-1,0,j,bmpheight),
이미지1.캔버스,
Rect(bmp폭-i+j-1,0,bmp폭-i+j,bmheight));
newbmp.Canvas.CopyRect(Rect
(bmp폭-j,0,bmp폭-j+1,bmheight),
이미지1.캔버스,
Rect(ij,0,i-j+1,bmheight));
j:=j-2;
끝;
form1.Canvas.Draw(120,100,newbmp);
나는:=i+2;
끝;
newbmp.free;
끝;
4. 빗방울 효과
원리: 임시 그래픽의 마지막 스캔 라인을 표시되는 비트맵의 첫 번째에서 마지막 스캔 라인으로 순서대로 이동하여 이 스캔 라인이 화면에 흔적을 남길 수 있도록 합니다. 그런 다음, 임시 그래픽의 끝에서 두 번째 스캔 라인이 표시되는 비트맵의 첫 번째에서 두 번째 스캔 라인으로 순서대로 이동됩니다. 나머지 스캔 라인에 대해서도 마찬가지입니다.
프로그램 알고리즘:
절차 TForm1.Button3Click(Sender: TObject);
var
newbmp:TBitmap;
i,j,bmpheight,bmp폭:정수;
시작하다
newbmp:= TBitmap.Create;
newbmp.Width:=image1.Width;
newbmp.Height:=image1.Height;
bmheight:=image1.높이;
bmp폭:=image1.Width;
i:=bmheight downto 1 do의 경우
for j:=1 to i do
시작하다
newbmp.Canvas.CopyRect(Rect(0,j-1,bmpwidth,j),
이미지1.캔버스,
Rect(0,i-1,bmp폭,i));
form1.Canvas.Draw(120,100,newbmp);
끝;
newbmp.free;
끝;
5.루브르 효과
원리: 임시 그래픽에 배치된 데이터를 여러 그룹으로 나눈 후 첫 번째 그룹에서 마지막 그룹으로 순차적으로 이동합니다. 처음에는 각 그룹이 첫 번째 스캔 라인을 표시되는 비트맵의 해당 위치로 이동하고 두 번째 그룹은 다음과 같습니다. time 두 번째 스캔 라인을 이동한 다음 세 번째와 네 번째 스캔 라인을 이동합니다.
프로그램 알고리즘:
절차 TForm1.Button6Click(Sender: TObject);
var
newbmp:TBitmap;
i,j,bmpheight,bmp폭:정수;
xgroup,xcount:정수;
시작하다
newbmp:= TBitmap.Create;
newbmp.Width:=image1.Width;
newbmp.Height:=image1.Height;
bmheight:=image1.높이;
bmp폭:=image1.Width;
x그룹:=16;
xcount:=bmheight div xgroup;
i:=0에서 xcount do까지
j:=0에서 xgroup으로 수행
시작하다
newbmp.Canvas.CopyRect(Rect
(0,xcount*j+i-1,bmp폭,xcount*j+i),
이미지1.캔버스,
Rect(0,xcount*j+i-1,bmpwidth,xcount*j+i));
form1.Canvas.Draw(120,100,newbmp);
끝;
newbmp.Free;
끝;
6. 빌딩 블록 효과
원리: 빗방울 효과의 변형입니다. 차이점은 빌딩 블록 효과가 스캔 라인뿐만 아니라 매번 그래픽 조각을 이동한다는 것입니다.
프로그램 알고리즘:
절차 TForm1.Button7Click(Sender: TObject);
var
newbmp:TBitmap;
i,j,bmpheight,bmp폭:정수;
시작하다
newbmp:= TBitmap.Create;
newbmp.Width:=image1.Width;
newbmp.Height:=image1.Height;
bmheight:=image1.높이;
bmp폭:=image1.Width;
i:=bm높이;
내가 >0 하는 동안
시작하다
for j:=10 to i do
시작하다
newbmp.Canvas.CopyRect(Rect(0,j-10,bmpwidth,j),
이미지1.캔버스,
Rect(0,i-10,bmp폭,i));
form1.Canvas.Draw(120,100,newbmp);
끝;
나는:=i-10;
끝;
newbmp.free;
끝;
결론
위의 그래픽 디스플레이 효과는 컴퓨터에 전달되었으며 소프트웨어 환경은 Delphi 3.0, 하드웨어 환경은 Pentium 100M 호환 시스템입니다. 잘 작동합니다.