Модератор: BV
Proxy писал(а):нашёл пример, но что-то он медленный какой-то.
Proxy писал(а):сделаю ресайз DLL
void RESIZE(unsigned char* src, unsigned char* dest, int ws, int hs, int wd, int hd)
{
int xx, yy;
int x, y;
int ixx, iyy;
int ix, iy;
int cx, cy;
int cxy, cc;
int pin, pout, p;
int b, g, r, a;
int *ikx, *iky;
int *kx, *ky;
cx = (ws - 1) / wd + 2;
cy = (hs - 1) / hd + 2;
x = cx * wd;
y = cy * hd;
ikx = (int *)_alloca(x * 4);
iky = (int *)_alloca(y * 4);
kx = (int *)_alloca(x * 4);
ky = (int *)_alloca(y * 4);
for (xx = 0; xx < x; xx++)
{
ikx[xx] = 0;
kx[xx] = 0;
}
for (yy = 0; yy < y; yy++)
{
iky[yy] = 0;
ky[yy] = 0;
}
if (ws >= wd)
{
cxy = ws;
pin = 0; pout = 1; p = 0;
for(;;)
{
cc = pout * ws - pin * wd;
if (cc >= wd)
{
kx[p] = wd;
}
else
{
kx[p] = cc;
ikx[p] = pin;
p = pout * cx;
pout += 1;
kx[p] = wd - cc;
}
ikx[p] = pin;
pin += 1;
if (pin >= ws) break;
p += 1;
}
}
else
{
cxy = wd;
for (x = 0; x < wd; x++)
{
p = x * 2;
kx[p + 1] = x * (ws - 1) % (wd - 1);
ikx[p] = x * (ws - 1) / (wd - 1);
kx[p] = wd - kx[p + 1];
ikx[p + 1] = (ikx[p] + 1) % ws;
}
}
if (hs >= hd)
{
cxy *= hs;
pin = 0; pout = 1; p = 0;
for(;;)
{
cc = pout * hs - pin * hd;
if (cc >= hd)
{
ky[p] = hd;
}
else
{
ky[p] = cc;
iky[p] = pin;
p = pout * cy;
pout += 1;
ky[p] = hd - cc;
}
iky[p] = pin;
pin += 1;
if (pin >= hs) break;
p += 1;
}
}
else
{
cxy *= hd;
for (y = 0; y < hd; y++)
{
p = y * 2;
ky[p + 1] = y * (hs - 1) % (hd - 1);
iky[p] = y * (hs - 1) / (hd - 1);
ky[p] = hd - ky[p + 1];
iky[p + 1] = (iky[p] + 1) % hs;
}
}
iyy = 0;
for (yy = 0; yy < hd; yy++)
{
ixx = 0;
for (xx = 0; xx < wd; xx++)
{
b = g = r = a = 0;
iy = iyy;
for (y = 1; y <= cy; y++)
{
ix = ixx;
for (x = 1; x <= cx; x++)
{
b += src[(ikx[ix] + iky[iy] * ws) * 4 + 0] * kx[ix] * ky[iy];
g += src[(ikx[ix] + iky[iy] * ws) * 4 + 1] * kx[ix] * ky[iy];
r += src[(ikx[ix] + iky[iy] * ws) * 4 + 2] * kx[ix] * ky[iy];
a += src[(ikx[ix] + iky[iy] * ws) * 4 + 3] * kx[ix] * ky[iy];
ix += 1;
}
iy += 1;
}
dest[(xx + yy * wd) * 4 + 0] = b / cxy;
dest[(xx + yy * wd) * 4 + 1] = g / cxy;
dest[(xx + yy * wd) * 4 + 2] = r / cxy;
dest[(xx + yy * wd) * 4 + 3] = a / cxy;
ixx += cx;
}
iyy += cy;
}
return;
}
Proxy писал(а):Позже планирую ещё добавить различные анализаторы (фотогистограмма и т.п.), различные эффекты вроде размытия, повороты/отражения изображения, изменение размера, просмотр каталогов, открытие файлов и т.д. Но пока только коррекция цвета и на мой взгляд довольно не тормозная.
Mikle писал(а):Могу дать этот же пример, переведенный на C++, точнее саму функцию Resize.
Хакер писал(а):тебе надо сменить звание на «Обфускатор»
BV писал(а):Я хотел её переписать в GraphicsDemo, но терпения моего на твои сокращения не хватило
Mikle писал(а):Кроме отсутствия коментариев, к коду есть претензии?
AppName: photopf.exe AppVer: 0.0.0.11 ModName: photopf.exe
ModVer: 0.0.0.11 Offset: 00019cf2
Mikle писал(а):а если просто скопипастить и скомпилировать?
BV писал(а):Proxy, ты пропустил мой пост?
BV писал(а):Функция не переносима в проект без правок
#include <malloc.h>
Mikle писал(а):BV писал(а):Функция не переносима в проект без правок
Почему?
Там только добавить нужно, забыл сразу написать:
- Код: Выделить всё
#include <malloc.h>
Proxy писал(а):Не пропустил, просто хочу побыстрее это чудовище допинать, придать форму и функциональность. А потом постараюсь взяться за свою задумку, которую описывал в народном трёпе.
Mikle писал(а):Почему?
BV писал(а):То есть, ты все равно хочешь изобрести велосипед, вместо того, что бы внести свой вклад в один из существующих проектов?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 34