![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поворот изображений
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.