Описание программы
Программа работает с изображениями формата BMP, с количеством точек 640х480.
При загрузке программа просит выбрать одно или несколько изображение для дальнейшей работы с ними. После выбора изображения программа позволяет выводить одно за одним выбранные изображения, с различными эффектами и различной задержкой.
Используемые эффекты:
Пикселизация
Квадратики
Линии
Демонстрация слайд-шоу:
Слева направо
Справа налево
Сверху вниз
Снизу вверх
К центру
От центра
Жалюзи горизонтальные
Жалюзи вертикальные
Описание процедур
void __fastcall TForm1::Button1Click(TObject *Sender)
{
NextImage();
TRect rect;
for(int x=0;x<X;x++) // наращивание по х происходит от 0 до Х=640
{
rect=Rect(x,0,x+1,Y);// устанавливаем точку, от которой начинвется вывод
изображения
Form1->Canvas->CopyRect(rect,Image2->Picture->Bitmap->Canvas,rect);
for(int i=0;i<=StrToInt(Edit1->Text);i++){};// вывод изображения с определенной заданной скоростью
}
Процедура выполняется при нажатии Кнопки1 «Слева направо». Производится попиксельный вывод изображение NextImage по х, начиная с х=0 до Х=640.
void __fastcall TForm1::Button2Click(TObject *Sender)
{
NextImage();
TRect rect;
for(int x=X-1;x>=0;x--)// наращивание по х происходит от 640 до 0
{
rect=Rect(x,0,x+1,Y); // устанавливаем грань, от которой начинается вывод изображения
Form1->Canvas->CopyRect(rect,Image2->Picture->Bitmap->Canvas,rect);
for(int i=0;i<=StrToInt(Edit1->Text);i++){};// вывод изображения с определенной заданной скоростью
}
Процедура выполняется при нажатии Кнопки2 «Справа налево». Производится попиксельный вывод изображение NextImage по х, начиная с Х=640 до х=0
void __fastcall TForm1::Button3Click(TObject *Sender)
{
NextImage();
TRect rect;
for(int y=0;y<Y;y++)// вывод изображения осуществляется по оси у от 0 до 480
{
rect=Rect(0,y,X,y+1);//точка отсчета – верхняя грань
Form1->Canvas->CopyRect(rect,Image2->Picture->Bitmap->Canvas,rect);
for(int i=0;i<=StrToInt(Edit1->Text);i++){};//вывод изображения с определенной заданной скоростью
}
Процедура выполняется при нажатии Кнопки2 «Сверху вниз». Производится построковый вывод пикселей изображения NextImage по у, начиная с У=0 до у=480
void __fastcall TForm1::Button4Click(TObject *Sender)
{
NextImage();
TRect rect;
for(int y=Y-1;y>=0;y--)// вывод изображения осуществляется по оси у от 480 до 0
{
rect=Rect(0,y,X,y+1);
Form1->Canvas->CopyRect(rect,Image2->Picture->Bitmap->Canvas,rect);
for(int i=0;i<=StrToInt(Edit1->Text);i++){};//вывод изображения с определенной заданной скоростью
}
Процедура выполняется при нажатии Кнопки2 «Снизу вверх». Производится построковый вывод пикселей изображения NextImage по у, начиная с у=480 до У=0
void __fastcall TForm1::Button9Click(TObject *Sender)
{
NextImage();
TRect rect;
int y1;
float kof=(float)Y/(float)X;
for(int x=0;x<=X/2;x++)
{
y1=x*kof;
rect=Rect(x,y1,x+1,Y-y1); \\ отсчет от левого верхнего угла
Form1->Canvas->CopyRect(rect,Image2->Picture->Bitmap->Canvas,rect);
rect=Rect(X-x,y1,X-x-1,Y-y1);\\ отсчет от правого верхнего угла
Form1->Canvas->CopyRect(rect,Image2->Picture->Bitmap->Canvas,rect);
rect=Rect(x,y1,X-x,y1+1);\\левый нижний
Form1->Canvas->CopyRect(rect,Image2->Picture->Bitmap->Canvas,rect);
rect=Rect(x,Y-y1,X-x,Y-y1-1);\\правый нижний угол
Form1->Canvas->CopyRect(rect,Image2->Picture->Bitmap->Canvas,rect);
for(int i=0;i<=StrToInt(Edit1->Text);i++){};
}
}
Процедура выполняется при нажатии Кнопки9 «К центру». Производится построковый вывод пикселей изображения NextImage начиная от граней изображения до точки X/2 и Y/2. Вывод осуществляется вдоль диагоналей
void __fastcall TForm1::Button10Click(TObject *Sender)
{
NextImage();
TRect rect;
int y1;
float kof=(float)Y/(float)X;
for(int x=X/2;x>=0;x--)
{
y1=x*kof;
rect=Rect(x,y1,x+1,Y-y1);
Form1->Canvas->CopyRect(rect,Image2->Picture->Bitmap->Canvas,rect);
rect=Rect(X-x,y1,X-x-1,Y-y1);
Form1->Canvas->CopyRect(rect,Image2->Picture->Bitmap->Canvas,rect);
rect=Rect(x,y1,X-x,y1+1);
Form1->Canvas->CopyRect(rect,Image2->Picture->Bitmap->Canvas,rect);
rect=Rect(x,Y-y1,X-x,Y-y1-1);
Form1->Canvas->CopyRect(rect,Image2->Picture->Bitmap->Canvas,rect);
for(int i=0;i<=StrToInt(Edit1->Text);i++){};
}
}
Процедура выполняется при нажатии Кнопки10 «От центра». Производится построковый вывод пикселей изображения NextImage начиная от центра изображения с координатами X/2 и Y/2. Вывод осуществляется вдоль диагоналей
void __fastcall TForm1::Button13Click(TObject *Sender)
{
NextImage();
int y;
for(int x=0;x<X;x++)
{
for(y=0;y<Y;y=y+2)//отсчет по у от 0 до 480, при этом ширина шага y=y+2
{
Form1->Canvas->Pixels[x][y]=Image2->Picture->Bitmap->Canvas->Pixels[x][y];
Form1->Canvas->Pixels[X-x-1][y+1]=Image2->Picture->Bitmap->Canvas->Pixels[X-x-1][y+1];
}
}
}
Процедура выполняется при нажатии Кнопки13 «Горизонтальные жалюзи». Справа и слева идет построковое заполнение пикселями шириной 2 пикселя.
void __fastcall TForm1::Button14Click(TObject *Sender)
{
NextImage();
TRect rect;
int x;
for(int y=0;y<Y;y++)
{
for(x=0;x<X;x=x+2*X/20)//отсчет по оси х от 0 до 640, шаг x=x+2*X/20
{
rect=Rect(x,y,x+X/20,y+1);// заполнение от левой грани
Form1->Canvas->CopyRect(rect,Image2->Picture->Bitmap->Canvas,rect);
rect=Rect(x+X/20,Y-y-1,x+2*X/20,Y-y);// заполнение от правой грани
Form1->Canvas->CopyRect(rect,Image2->Picture->Bitmap->Canvas,rect);
for(int i=0;i<=StrToInt(Edit1->Text)/10;i++){};// с учетом скорости
}
}
}
Процедура выполняется при нажатии Кнопки14 «Вертикальные жалюзи». В заполнении участвуют 20 полосок по шириной 64 пикселя. (x=x+2*X/20)
void __fastcall TForm1::Button15Click(TObject *Sender)
{
NextImage();
TRect rect;
const d=10; // величина грани квадрата
int x_=X/d,y_=Y/d,x,y;// инициализируем новые переменные
byte pole[X/d][Y/d];
for(int x=0;x<X/d;x++)// грань квадрата по х
for(int y=0;y<Y/d;y++) pole[x][y]=0;// грань квадрата по у
for(int i=0;i<x_*y_;i++)// площадь квадрата
{
x=random(x_);
y=random(y_);
while(pole[x][y]==1)
{
x=random(x_);
y=random(y_);
}
pole[x][y]=1;
rect=Rect(x*d,y*d,(x+1)*d,(y+1)*d);
Form1->Canvas->CopyRect(rect,Image2->Picture->Bitmap->Canvas,rect);
for(int i=0;i<=StrToInt(Edit1->Text)/10;i++){};
}
}
Процедура выполняется при нажатии Кнопки15 «Квадратики». Заполнение осуществляется при помощи заполнения отдельными сегментами (квадратиками). Заполнение осуществляется произвольным способом при помощи функции random. Длина ребра каждого квадрата d=10
void __fastcall TForm1::Button16Click(TObject *Sender)
{
NextImage();
int x,y;
byte pole[X][Y];
for(int x=0;x<X;x++)
for(int y=0;y<Y;y++) pole[x][y]=0;
for(int i=0;i<X*Y-100;i++)
{
x=random(X);
y=random(Y);
while(pole[x][y]==1)
{
x=random(X);
y=random(Y);
}
pole[x][y]=1;
Form1->Canvas->Pixels[x][y]=Image2->Picture->Bitmap->Canvas->Pixels[x][y];
}
Form1->Canvas->CopyRect(Rect(0,0,Image2->Picture->Bitmap->Width,Image2->Picture->Bitmap->Height),Image2->Picture->Bitmap->Canvas,Rect(0,0,Image2->Picture->Bitmap->Width,Image2->Picture->Bitmap->Height));
}
Процедура выполняется при нажатии Кнопки16 «Пикселизация». Изображение выводится попиксельно. Количество пикселей равно X*Y-100=307100
void __fastcall TForm1::Button17Click(TObject *Sender)
{
NextImage();
int x1,y1,x2,y2,xt,yt,tmp;
float k,x,y;
byte pole[X][Y];
for(x1=0;x1<X;x1++)
for(y1=0;y1<Y;y1++) pole[x1][y1]=0;
for(int i=0;i<100000;i++)//количество линий
{
x1=random(X);
y1=random(Y);
x2=random(X);
y2=random(Y);
if(abs(x2-x1)>abs(y2-y1))
{
if(x1>x2){tmp=x1;x1=x2;x2=tmp;tmp=y1;y1=y2;y2=tmp;}
y=y1;
if(y1!=y2)
{
k=(float)(y2-y1)/(float)(x2-x1);
for(xt=x1;xt<x2;xt++)
{
y=y+k;
yt=y;
if(pole[xt][yt]==0)
{
Form1->Canvas->Pixels[xt][yt]=Image2->Picture->Bitmap->Canvas->Pixels[xt][yt];
pole[xt][yt]=1;
}
}
}
}else
{
if(y1>y2){tmp=x1;x1=x2;x2=tmp;tmp=y1;y1=y2;y2=tmp;}
x=x1;
if(x1!=x2)
{
k=(float)(x2-x1)/(float)(y2-y1);
for(yt=y1;yt<y2;yt++)
{
x=x+k;
xt=x;
if(pole[xt][yt]==0)
{
Form1->Canvas->Pixels[xt][yt]=Image2->Picture->Bitmap->Canvas->Pixels[xt][yt];
pole[xt][yt]=1;
}
}
}
}
}
tmp=0;
for(x1=0;x1<X;x1++)
for(y1=0;y1<Y;y1++) if(pole[x1][y1]==0) tmp++;
for(int i=0;i<tmp-1000;i++)
{
xt=random(X);
yt=random(Y);
while(pole[xt][yt]==1)
{
xt=random(X);
yt=random(Y);
}
pole[xt][yt]=1;
Form1->Canvas->Pixels[xt][yt]=Image2->Picture->Bitmap->Canvas->Pixels[xt][yt];
}
Form1->Canvas->CopyRect(Rect(0,0,Image2->Picture->Bitmap->Width,Image2->Picture->Bitmap->Height),Image2->Picture->Bitmap->Canvas,Rect(0,0,Image2->Picture->Bitmap->Width,Image2->Picture->Bitmap->Height));
}
Процедура выполняется при нажатии Кнопки17 «Линии». Вывод производится при помощи линий. Линии выводятся в произвольном порядке. Количество линий = 100000.
void __fastcall TForm1::Button20Click(TObject *Sender)
{
Close();
Выход из программы.
Входные и выходные данные
На вход к программе подаются изображения в формате bmp, размером 640×480, загружается из папки.
На выход подаются те же самые изображения только с эффектами.
Требования к системе
Для успешной работы программы требуется
процессор совместимый с Intel
минимальное количество оперативной памяти, достаточное для работы ОС
видео карта SVGA, способная поддерживать режим 640X480 256 цветов
мышь
операционная система DOS или совместимая с ней
Интерфейс:
13 кнопок на панели1:
- Пикселизация
- Квадратики
- Линии
- Слева направо
- Справа налево
- Сверху вниз
- Снизу вверх
- К центру
- От центра
- Жалюзи горизонтальные
- Жалюзи вертикальные
В окне формы рисунок Image2
2 надписи:
- эффекты
- просмотр слайдов
Редактируемая область, где вписывается скорость эффекта.