Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Zooming в TImage [D6, Win95/98]


Baky ©   (2002-11-24 16:03:00) 

как делать зуминг к Image


[NIKEL]   (2002-11-25 11:17:00) [1]

методом билинейной интерполяции можно получть хорошее качество
вырезки из проекта:

int Bilinear(BYTE Image[][256], float i, float j)
{
int x1, y1, x2, y2;
float Gray;

x1 = (int)floor(i);
x2 = x1+1;
y1 = (int)floor(j);
y2 = y1+1;
Gray = (y2-j)*(x2-i)*Image[x1][y1] + (y2-j)*(i-x1)*Image[x2][y1]
+ (j-y1)*(x2-i)*Image[x1][y2] + (j-y1)*(i-x1)*Image[x2][y2];
return INT(Gray);
}
//-------------------------------------------------------------
void __fastcall TForm1::Button7Click(TObject *Sender)
{
BYTE ImageData[256][256], *LinePtr;
BYTE Output[256][256];
int x, y;
float i, j, zoom=4.0;
int x0=127, y0=127; //куда масштабируем

// копируем в Bitmap
for (y=0; y<=255; y++)
{
LinePtr = (BYTE *) Image1->Picture->Bitmap->ScanLine[y];
for (x=0; x<=255; x++)
ImageData[x][y] = LinePtr[x];
}
// подсчитываем получившееся изображение
for (y=0; y<=255; y++)
for (x=0; x<=255; x++)
{
i = (x+(zoom-1)*x0) / zoom;
j = (y+(zoom-1)*y0) / zoom;
Output[x][y] = Bilinear(ImageData, i, j);
}
// копируем обратно
for (y=0; y<=255; y++)
{
LinePtr = (BYTE *) Image1->Picture->Bitmap->ScanLine[y];
for (x=0; x<=255; x++)
LinePtr[x] = Output[x][y];
}
Image1->Refresh();
}


Дмитрий К.К.   (2002-11-25 09:49:00) [2]

Качество потеряешь в любом случае.


dim-   (2002-11-25 09:41:00) [3]

в Image делаешь растягивание и меняешь его размер


Наверх

Титульная страница Поиск, карта сайта Написать письмо