Обзор
----В настоящее время во многих обучающих программах и компакт-дисках с играми часто можно увидеть различные
Технология графического отображения основана на движении графики, чересстрочной развертке, форме капли дождя, жалюзи, укладке строительных блоков и других методах отображения, чтобы сделать изображение более живым и привлекательным для аудитории. В этой статье мы рассмотрим, как реализовать различные методы графического отображения в Delphi.
Основные принципы
----В Delphi отобразить изображение очень просто. Просто определите компонент TImage в форме, установите его атрибут изображения, а затем выберите любой действительный файл .ICO, .BMP, .EMF или .WMF, загрузите, и выбранный файл будет отображаться в компоненте TImage. Но это просто выводит графику прямо в форму, и тут вообще нет никакого навыка. Чтобы графическое отображение имело уникальный эффект, вы можете выполнить следующие шаги:
----Определите компонент TImage и сначала загрузите графику, которая будет отображаться, в компонент TImage. Другими словами, загрузите графическое содержимое с диска в память в качестве графического кэша.
----Создайте новый растровый объект того же размера, что и графика в компоненте TImage.
----Используйте функцию CopyRect Canvas (копируйте прямоугольную область одного холста в прямоугольную область другого холста), используйте приемы и динамически формируйте
в содержимое растрового файла, а затем отображает растровое изображение в форме.
----Метод реализации
Ниже представлены различные методы графического отображения:
1. Двухтактный эффект
Отображаемая графика вытягивается на экран сверху, вниз, влево и вправо, при этом исходная старая графика на экране одновременно закрывается. Этот эффект можно разделить на четыре.
Существует три типа: подтягивание, вытягивание вниз, вытягивание влево и вытягивание вправо, но принципы аналогичны. Возьмем в качестве примера эффект подтягивания.
Принцип: сначала переместите первую горизонтальную линию, помещенную во временное изображение, на последнюю в отображаемом растровом изображении, а затем переместите первые две горизонтальные линии временного изображения в последние две горизонтальные линии, которые будут отображаться, и. затем переместите первые три и первые четыре???, пока все графические данные не будут перемещены. В процессе перемещения вы можете видеть, что отображаемое растровое изображение перемещается снизу вверх, создавая эффект подтягивания.
Алгоритм программы:
PROcedure TForm1.Button1Click(Отправитель: TObject);
вар
новыйbmp: TBitmap;
я, bmpheight, bmpwidth: целое число;
начинать
newbmp:= TBitmap.Create;
newbmp.Width:=image1.Width;
newbmp.Height:=image1.Height;
bmpheight:=image1.Height;
bmpwidth:=image1.Width;
для i:=0 для bmpheight сделать
начинать
newbmp.Canvas.CopyRect(Rect
(0,bmpheight-i,bmpwidth,bmpheight),
изображение1.Холст,
Rect(0,0,bmpwidth,i));
form1.Canvas.Draw(120,100,newbmp);
конец;
новыйbmp.free;
конец;
2. Эффект вертикального смещения
Принцип: Разделите отображаемую графику на две части. Строки сканирования с нечетными номерами перемещаются сверху вниз, а строки сканирования с четными номерами перемещаются снизу вверх, и обе выполняются одновременно. На экране вы можете видеть, что более светлая графика, появляющаяся в верхнем и нижнем концах, перемещается к центру экрана, пока не станет полностью четкой.
Алгоритм программы:
процедура TForm1.Button4Click(Отправитель: TObject);
вар
новыйbmp:TBitmap;
я, j, bmpheight, bmpwidth: целое число;
начинать
newbmp:= TBitmap.Create;
newbmp.Width:=image1.Width;
newbmp.Height:=image1.Height;
bmpheight:=image1.Height;
bmpwidth:=image1.Width;
я:=0;
пока я < =bmpheight делаю
начинать
j:=я;
пока j>0 делать
начинать
newbmp.Canvas.CopyRect(Rect(0,j-1,bmpwidth,j),
изображение1.Холст,
Rect(0,bmpheight-i+j-1,bmpwidth,bmpheight-i+j));
newbmp.Canvas.CopyRect(Rect
(0,bmpheight-j,bmpwidth,bmpheight-j+1),
изображение1.Холст,
Rect(0,ij,bmpwidth,i-j+1));
j:=j-2;
конец;
form1.Canvas.Draw(120,100,newbmp);
я:=я+2;
конец;
новыйbmp.free;
конец;
3. Горизонтальный шахматный эффект
Принцип: Тот же принцип, что и эффект вертикального чересстрочного изображения, за исключением того, что графика, разделенная на две группы, перемещается на экран с левого и правого концов соответственно.
Алгоритм программы:
процедура TForm1.Button5Click(Отправитель: TObject);
вар
новыйbmp:TBitmap;
я, j, bmpheight, bmpwidth: целое число;
начинать
newbmp:= TBitmap.Create;
newbmp.Width:=image1.Width;
newbmp.Height:=image1.Height;
bmpheight:=image1.Height;
bmpwidth:=image1.Width;
я:=0;
пока я < =bmpwidth делаю
начинать
j:=я;
пока j>0 делать
начинать
newbmp.Canvas.CopyRect(Rect(j-1,0,j,bmpheight),
изображение1.Холст,
Rect(bmpwidth-i+j-1,0,bmpwidth-i+j,bmpheight));
newbmp.Canvas.CopyRect(Rect
(bmpwidth-j,0,bmpwidth-j+1,bmpheight),
изображение1.Холст,
Rect(ij,0,i-j+1,bmpheight));
j:=j-2;
конец;
form1.Canvas.Draw(120,100,newbmp);
я:=я+2;
конец;
новыйbmp.free;
конец;
4. Эффект капли дождя
Принцип: последовательно переместите последнюю строку сканирования временной графики к первой и последней строке сканирования видимого растрового изображения, позволяя этой строке сканирования оставить свой след на экране. Затем предпоследняя строка сканирования временной графики последовательно перемещается к первой и предпоследней строкам сканирования видимого растрового изображения. И так далее по остальным строкам сканирования.
Алгоритм программы:
процедура TForm1.Button3Click(Отправитель: TObject);
вар
новыйbmp:TBitmap;
я, j, bmpheight, bmpwidth: целое число;
начинать
newbmp:= TBitmap.Create;
newbmp.Width:=image1.Width;
newbmp.Height:=image1.Height;
bmpheight:=image1.Height;
bmpwidth:=image1.Width;
для i:=bmpheight до 1 сделать
для j:=1, чтобы я сделал
начинать
newbmp.Canvas.CopyRect(Rect(0,j-1,bmpwidth,j),
изображение1.Холст,
Rect(0,i-1,bmpwidth,i));
form1.Canvas.Draw(120,100,newbmp);
конец;
новыйbmp.free;
конец;
5. Эффект жалюзи
Принцип: Разделите данные, помещенные во временную графику, на несколько групп, а затем последовательно переместите их из первой группы в последнюю. Первый раз каждая группа перемещает первую строку развертки в соответствующую позицию видимого растрового изображения, а вторую. time Переместите вторую строку сканирования, затем переместите третью и четвертую линии сканирования.
Алгоритм программы:
процедура TForm1.Button6Click(Отправитель: TObject);
вар
новыйbmp:TBitmap;
я, j, bmpheight, bmpwidth: целое число;
xgroup, xcount: целое число;
начинать
newbmp:= TBitmap.Create;
newbmp.Width:=image1.Width;
newbmp.Height:=image1.Height;
bmpheight:=image1.Height;
bmpwidth:=image1.Width;
хгруппа:=16;
xcount:=bmpheight div xgroup;
для i:=0 до xcount сделать
для j:=0 в xgroup сделать
начинать
newbmp.Canvas.CopyRect(Rect
(0,xcount*j+i-1,bmpwidth,xcount*j+i),
изображение1.Холст,
Rect(0,xcount*j+i-1,bmpwidth,xcount*j+i));
form1.Canvas.Draw(120,100,newbmp);
конец;
новыйbmp.Бесплатно;
конец;
6. Эффект строительного блока
Принцип: это разновидность эффекта капли дождя. Разница в том, что эффект строительного блока каждый раз перемещает часть графики, а не просто строку сканирования.
Алгоритм программы:
процедура TForm1.Button7Click(Отправитель: TObject);
вар
новыйbmp:TBitmap;
я, j, bmpheight, bmpwidth: целое число;
начинать
newbmp:= TBitmap.Create;
newbmp.Width:=image1.Width;
newbmp.Height:=image1.Height;
bmpheight:=image1.Height;
bmpwidth:=image1.Width;
я:=bmpheight;
пока я>0 делаю
начинать
для j:=10, чтобы я сделал
начинать
newbmp.Canvas.CopyRect(Rect(0,j-10,bmpwidth,j),
изображение1.Холст,
Rect(0,i-10,bmpwidth,i));
form1.Canvas.Draw(120,100,newbmp);
конец;
я:=я-10;
конец;
новыйbmp.free;
конец;
Заключение
Вышеупомянутые эффекты графического отображения были переданы на компьютер, программная среда — Delphi 3.0, а аппаратная среда — машина, совместимая с Pentium 100M. Это отлично работает.