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

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

Поворот изображений


BMouradov ©   (2007-08-03 10:15:00) 

Посоветуйте библиотеку или модуль для поворота изображений в KOL. Или подскажите vcl-модуль, который было бы несложно переделать в KOL.


homm   (2007-08-06 21:17:00) [1]

> затем уменьшения после поворота с halftone - прокатит по
> качеству, но будет ещё медленнее.

можно использовать BitmapAntialias4Xи BitmapAntialias2Xиз модуля KOLGRushControls, в разы быстрее.


Vladimir Kladov   (2007-08-06 18:24:00) [2]

Это будет поворот со значительным ухудшением качества, и довольно медленный. Как вариант, с использованием предварительного увеличения, затем уменьшения после поворота с halftone - прокатит по качеству, но будет ещё медленнее.


Dimaxx   (2007-08-06 14:07:00) [3]

Вот тут у мну есть модуль на Си. Сам алгоритм описан довольно неплохо. Дума, перевести его на Паскаль несложно. Но он DOSовский, т.е. непосредственно обращается к памяти.

Вpащение pастpовой каpтинки

Алгоритм достаточно подробно объяснен в виде комментариев.

#include
#include
#include
#include
#include
#include

typedef struct {
char              bfType[2];
unsigned long     bfSize;
unsigned long     bfReserved;
unsigned long     bfOffBits;

unsigned long     biSize;
unsigned long     biWidth;
unsigned long     biHeight;
unsigned int      biPlanes;
unsigned int      biBitCount;
unsigned long     biCompression;
unsigned long     biSizeImage;
unsigned long     biXPelsPerMeter;
unsigned long     biYPelsPerMeter;
unsigned long     biClrUsed;
unsigned long     biClrImportant;

struct {
  unsigned char rgbBlue;
  unsigned char rgbGreen;
  unsigned char rgbRed;
  unsigned char rgbReserved;
} bmiColors[256];

} TBMPFileHeader;

typedef unsigned char Row[320];

main(argc,argv)
int argc;
char **argv;
{
Row            *screen = MK_FP(0xA000,0),
               *picture,
               *buffer;

int            BMP;
TBMPFileHeader header;

unsigned       x,y,i,
               xp,yp;

long           x0,y0,
               xdx,xdy,
               ydx,ydy,
               x1,y1;

double         A, SinA, CosA, scale;

int            r,g,b, black, black_bri, bri;

if ( argc 2;
   g=header.bmiColors[i].rgbGreen >> 2;
   b=header.bmiColors[i].rgbBlue >> 2;
   outportb(0x3c9, r);
   outportb(0x3c9, g);
   outportb(0x3c9, b);
   bri=r*r+g*g+b*b; // яpкость текyщего цвета
   if (bri 16;
     // "клиппинг"
     if (/*xp>=0 &&*/ xp=0 &&*/ yp


Vladimir Kladov   (2007-08-03 10:47:00) [4]

На сколько поворот? На 90*n - TBitmap. Для других имеет смфсл использовать 3D-ускоритель системы OGL12 вполне достаточно, даже без OpenGLContext.


Наверх

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