pikl 0.2.8-x86-mswin32 → 0.3.0-x86-mswin32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +9 -0
- data/License.txt +0 -0
- data/Manifest.txt +17 -17
- data/README.txt +0 -0
- data/config/hoe.rb +9 -6
- data/config/requirements.rb +0 -0
- data/ext/pikl/pikl.h +617 -465
- data/ext/pikl/pikl_affine.c +38 -91
- data/ext/pikl/pikl_affine.h +0 -0
- data/ext/pikl/pikl_bitmap.c +0 -0
- data/ext/pikl/pikl_bitmap.h +0 -0
- data/ext/pikl/pikl_blur.c +4 -8
- data/ext/pikl/pikl_blur.h +0 -0
- data/ext/pikl/pikl_camera.c +218 -0
- data/ext/pikl/{pikl_effect3.h → pikl_camera.h} +2 -2
- data/ext/pikl/pikl_composite.c +175 -0
- data/ext/pikl/pikl_composite.h +12 -0
- data/ext/pikl/pikl_decrease.c +110 -45
- data/ext/pikl/pikl_decrease.h +0 -7
- data/ext/pikl/pikl_divide.c +116 -0
- data/ext/pikl/pikl_divide.h +11 -0
- data/ext/pikl/pikl_effect.c +583 -151
- data/ext/pikl/pikl_effect.h +32 -6
- data/ext/pikl/pikl_enhance.c +274 -0
- data/ext/pikl/pikl_enhance.h +20 -0
- data/ext/pikl/pikl_io.c +174 -23
- data/ext/pikl/pikl_io.h +0 -0
- data/ext/pikl/pikl_jpeg.c +0 -0
- data/ext/pikl/pikl_jpeg.h +0 -0
- data/ext/pikl/pikl_pattern.c +383 -357
- data/ext/pikl/pikl_pattern.h +0 -0
- data/ext/pikl/pikl_pixel.c +173 -0
- data/ext/pikl/{pikl_trim.h → pikl_pixel.h} +2 -2
- data/ext/pikl/pikl_png.c +0 -0
- data/ext/pikl/pikl_png.h +0 -0
- data/ext/pikl/pikl_private.h +12 -5
- data/ext/pikl/pikl_resize.c +0 -0
- data/ext/pikl/pikl_resize.h +0 -0
- data/ext/pikl/pikl_rotate.c +409 -51
- data/ext/pikl/pikl_rotate.h +8 -0
- data/ext/pikl/pikl_scrap.c +263 -483
- data/ext/pikl/pikl_scrap.h +0 -0
- data/ext/pikl/pikl_special.c +168 -0
- data/ext/pikl/{pikl_effect4.h → pikl_special.h} +2 -2
- data/ext/pikl/pikl_voronoi.c +320 -0
- data/ext/pikl/pikl_voronoi.h +37 -0
- data/lib/pikl.rb +4 -2
- data/lib/pikl/color.rb +47 -0
- data/lib/pikl/const.rb +106 -22
- data/lib/pikl/errors.rb +0 -0
- data/lib/pikl/ext.rb +115 -8
- data/lib/pikl/filter.rb +371 -0
- data/lib/pikl/image.rb +124 -117
- data/lib/pikl/pikl.dll +0 -0
- data/lib/pikl/version.rb +2 -2
- data/setup.rb +0 -0
- data/test/sample.jpg +0 -0
- data/test/test_helper.rb +0 -0
- data/test/test_pikl_image.rb +0 -14
- data/test/test_pikl_image2.rb +541 -0
- metadata +35 -23
- data/ext/pikl/decrease/fsdither.h +0 -554
- data/ext/pikl/decrease/median.c +0 -1179
- data/ext/pikl/decrease/median.h +0 -7
- data/ext/pikl/decrease/neuquan5.c +0 -563
- data/ext/pikl/decrease/neuquant.h +0 -62
- data/ext/pikl/decrease/wu.c +0 -447
- data/ext/pikl/decrease/wu.h +0 -7
- data/ext/pikl/pikl_effect2.c +0 -240
- data/ext/pikl/pikl_effect2.h +0 -55
- data/ext/pikl/pikl_effect3.c +0 -266
- data/ext/pikl/pikl_effect4.c +0 -495
- data/ext/pikl/pikl_rotate2.c +0 -312
- data/ext/pikl/pikl_rotate2.h +0 -19
- data/ext/pikl/pikl_trim.c +0 -28
data/ext/pikl/pikl_rotate2.c
DELETED
@@ -1,312 +0,0 @@
|
|
1
|
-
#include "pikl_rotate2.h"
|
2
|
-
|
3
|
-
static void get_rect(PIKL_RECT *rect, int w, int h, float rad);
|
4
|
-
static int ext_cmp_int(const void *a, const void *b);
|
5
|
-
static int pkl_rotate_nn(PKLImage pkl, float angle, unsigned char *backcolor);
|
6
|
-
static int pkl_rotate_bl(PKLImage pkl, float angle, unsigned char *backcolor);
|
7
|
-
static int pkl_rotate_bc(PKLImage pkl, float angle, unsigned char *backcolor);
|
8
|
-
//static int pkl_rotate_pa(PKLImage pkl, float angle, int backcolor);
|
9
|
-
//===================================================================
|
10
|
-
// pkl_rotate2
|
11
|
-
//===================================================================
|
12
|
-
PKLExport int pkl_rotate2(PKLImage pkl, float angle, PKL_SAMPLE sample,
|
13
|
-
unsigned char a, unsigned char b, unsigned char c, unsigned char d)
|
14
|
-
{
|
15
|
-
unsigned char backcolor[4];
|
16
|
-
|
17
|
-
backcolor[0] = a;
|
18
|
-
backcolor[1] = b;
|
19
|
-
backcolor[2] = c;
|
20
|
-
backcolor[3] = d;
|
21
|
-
|
22
|
-
switch(sample){
|
23
|
-
case PKL_SAMPLE_NN:
|
24
|
-
return pkl_rotate_nn(pkl, angle, backcolor);
|
25
|
-
case PKL_SAMPLE_BL:
|
26
|
-
return pkl_rotate_bl(pkl, angle, backcolor);
|
27
|
-
case PKL_SAMPLE_BC:
|
28
|
-
case PKL_SAMPLE_PA:
|
29
|
-
case PKL_SAMPLE_LZ:
|
30
|
-
return pkl_rotate_bc(pkl, angle, backcolor);
|
31
|
-
//return pkl_rotate_pa(pkl, angle, backcolor);
|
32
|
-
default:
|
33
|
-
return(1);
|
34
|
-
}
|
35
|
-
return(1);
|
36
|
-
}
|
37
|
-
|
38
|
-
//=============================================================================
|
39
|
-
// rotate_pos
|
40
|
-
//=============================================================================
|
41
|
-
static void get_rect(PIKL_RECT *rect, int width, int height, float rad)
|
42
|
-
{
|
43
|
-
int nimg_x[4], nimg_y[4];
|
44
|
-
int i, x, y;
|
45
|
-
|
46
|
-
nimg_x[0] = 0;
|
47
|
-
nimg_y[0] = 0;
|
48
|
-
nimg_x[1] = width;
|
49
|
-
nimg_y[1] = 0;
|
50
|
-
nimg_x[2] = 0;
|
51
|
-
nimg_y[2] = height;
|
52
|
-
nimg_x[3] = width;
|
53
|
-
nimg_y[3] = height;
|
54
|
-
|
55
|
-
for(i=0; i<4; i++){
|
56
|
-
x = (int)(cos(-rad)*nimg_x[i] - sin(-rad)*nimg_y[i]);
|
57
|
-
y = (int)(sin(-rad)*nimg_x[i] + cos(-rad)*nimg_y[i]);
|
58
|
-
nimg_x[i] = x;
|
59
|
-
nimg_y[i] = y;
|
60
|
-
}
|
61
|
-
qsort(nimg_x, 4, sizeof(int), ext_cmp_int);
|
62
|
-
qsort(nimg_y, 4, sizeof(int), ext_cmp_int);
|
63
|
-
rect->left = nimg_x[0];
|
64
|
-
rect->top = nimg_y[0];
|
65
|
-
rect->right = nimg_x[3];
|
66
|
-
rect->bottom = nimg_y[3];
|
67
|
-
}
|
68
|
-
|
69
|
-
//=================================================================================
|
70
|
-
// ext_cmp_int
|
71
|
-
//=================================================================================
|
72
|
-
static int ext_cmp_int(const void *a, const void *b)
|
73
|
-
{
|
74
|
-
return *((int *)a) - *((int *)b);
|
75
|
-
}
|
76
|
-
|
77
|
-
//=============================================================================
|
78
|
-
// pkl_rotate_nn
|
79
|
-
//=============================================================================
|
80
|
-
static int pkl_rotate_nn(PKLImage pkl, float angle, unsigned char *backcolor)
|
81
|
-
{
|
82
|
-
int width, height;
|
83
|
-
PIKL_RECT rect;
|
84
|
-
float rad;
|
85
|
-
unsigned char *wrk, back[4];
|
86
|
-
int i, j, px, py;
|
87
|
-
|
88
|
-
rad = -angle*M_PI/180;
|
89
|
-
get_rect(&rect, pkl->width, pkl->height, rad);
|
90
|
-
width = rect.right - rect.left;
|
91
|
-
height = rect.bottom - rect.top;
|
92
|
-
|
93
|
-
wrk = malloc(width * height * pkl->channel);
|
94
|
-
if(!wrk) return(1);
|
95
|
-
memset(wrk, 0, width*height*pkl->channel);
|
96
|
-
|
97
|
-
//for(i=0; i<pkl->channel; i++)
|
98
|
-
// back[i] = (backcolor>>((pkl->channel-i)*8) & 0xFF);
|
99
|
-
memcpy(back, backcolor, pkl->channel);
|
100
|
-
|
101
|
-
for(i=rect.top; i<rect.bottom; i++){
|
102
|
-
for(j=rect.left; j<rect.right; j++){
|
103
|
-
px = (int)(cos(rad) * j - sin(rad) * i);
|
104
|
-
py = (int)(sin(rad) * j + cos(rad) * i);
|
105
|
-
if(px>=0 && px<pkl->width && py>=0 && py<pkl->height){
|
106
|
-
memcpy(&wrk[((i-rect.top)*width+j-rect.left)*pkl->channel],
|
107
|
-
&pkl->image[(py*pkl->width+px)*pkl->channel], pkl->channel);
|
108
|
-
}else{
|
109
|
-
memcpy(&wrk[((i-rect.top)*width+j-rect.left)*pkl->channel], back, pkl->channel);
|
110
|
-
}
|
111
|
-
}
|
112
|
-
}
|
113
|
-
|
114
|
-
free(pkl->image);
|
115
|
-
pkl->image = wrk;
|
116
|
-
pkl->width = width;
|
117
|
-
pkl->height = height;
|
118
|
-
return(0);
|
119
|
-
}
|
120
|
-
|
121
|
-
//=============================================================================
|
122
|
-
// pkl_rotate_bl
|
123
|
-
//=============================================================================
|
124
|
-
static int pkl_rotate_bl(PKLImage pkl, float angle, unsigned char *backcolor)
|
125
|
-
{
|
126
|
-
int width, height;
|
127
|
-
PIKL_RECT rect;
|
128
|
-
float rad;
|
129
|
-
unsigned char *wrk, back[4];
|
130
|
-
int i, j, k, wx, wy, sx, sy;
|
131
|
-
double dx, dy, px, py, f[4];
|
132
|
-
|
133
|
-
rad = -angle*M_PI/180;
|
134
|
-
get_rect(&rect, pkl->width, pkl->height, rad);
|
135
|
-
width = rect.right - rect.left;
|
136
|
-
height = rect.bottom - rect.top;
|
137
|
-
|
138
|
-
wrk = malloc(width * height * pkl->channel);
|
139
|
-
if(!wrk) return(1);
|
140
|
-
memset(wrk, 0, width*height*pkl->channel);
|
141
|
-
|
142
|
-
//for(i=0; i<pkl->channel; i++)
|
143
|
-
// back[i] = (backcolor>>((pkl->channel-i)*8) & 0xFF);
|
144
|
-
memcpy(back, backcolor, pkl->channel);
|
145
|
-
|
146
|
-
for(i=rect.top; i<rect.bottom; i++){
|
147
|
-
for(j=rect.left; j<rect.right; j++){
|
148
|
-
dx = modf(cos(rad)*j-sin(rad)*i, &px);
|
149
|
-
dy = modf(sin(rad)*j+cos(rad)*i, &py);
|
150
|
-
f[0] = (1.0-dx)*(1.0-dy);
|
151
|
-
f[1] = dx*(1.0-dy);
|
152
|
-
f[2] = (1.0-dx)*dy;
|
153
|
-
f[3] = dx*dy;
|
154
|
-
|
155
|
-
for(wy=0; wy<2; wy++){
|
156
|
-
for(wx=0; wx<2; wx++){
|
157
|
-
sx = ((int)px+wx<0) ? pkl->width +((int)px+wx)%pkl->width -1 : ((int)px+wx)%pkl->width;
|
158
|
-
sy = ((int)py+wy<0) ? pkl->height+((int)py+wy)%pkl->height-1 : ((int)py+wy)%pkl->height;
|
159
|
-
if(px>=0 && px<pkl->width && py>=0 && py<pkl->height){
|
160
|
-
for(k=0; k<pkl->channel; k++){
|
161
|
-
wrk[((i-rect.top)*width+j-rect.left)*pkl->channel+k] =
|
162
|
-
PKL_COLOR_CLIP(wrk[((i-rect.top)*width+j-rect.left)*pkl->channel+k] +
|
163
|
-
pkl->image[(sy*pkl->width+sx)*pkl->channel+k] * f[wy*2+wx]);
|
164
|
-
}
|
165
|
-
}else{
|
166
|
-
memcpy(&wrk[((i-rect.top)*width+j-rect.left)*pkl->channel], back, pkl->channel);
|
167
|
-
}
|
168
|
-
}
|
169
|
-
}
|
170
|
-
}
|
171
|
-
}
|
172
|
-
|
173
|
-
free(pkl->image);
|
174
|
-
pkl->image = wrk;
|
175
|
-
pkl->width = width;
|
176
|
-
pkl->height = height;
|
177
|
-
return(0);
|
178
|
-
}
|
179
|
-
|
180
|
-
//=============================================================================
|
181
|
-
// pkl_rotate_bc
|
182
|
-
//=============================================================================
|
183
|
-
static int pkl_rotate_bc(PKLImage pkl, float angle, unsigned char *backcolor)
|
184
|
-
{
|
185
|
-
int width, height;
|
186
|
-
PIKL_RECT rect;
|
187
|
-
float rad;
|
188
|
-
unsigned char *wrk, back[4];
|
189
|
-
int i, j, k, px, py, x0, y0;
|
190
|
-
double wx, wy, dx, dy, sx, sy;
|
191
|
-
double data[PKL_CHANNEL];
|
192
|
-
|
193
|
-
rad = -angle*M_PI/180;
|
194
|
-
get_rect(&rect, pkl->width, pkl->height, rad);
|
195
|
-
width = rect.right - rect.left;
|
196
|
-
height = rect.bottom - rect.top;
|
197
|
-
|
198
|
-
wrk = malloc(width * height * pkl->channel);
|
199
|
-
if(!wrk) return(1);
|
200
|
-
memset(wrk, 0, width*height*pkl->channel);
|
201
|
-
|
202
|
-
//for(i=0; i<pkl->channel; i++)
|
203
|
-
// back[i] = (backcolor>>((pkl->channel-i)*8) & 0xFF);
|
204
|
-
memcpy(back, backcolor, pkl->channel);
|
205
|
-
|
206
|
-
for(i=rect.top; i<rect.bottom; i++){
|
207
|
-
for(j=rect.left; j<rect.right; j++){
|
208
|
-
memset(&data, 0, sizeof(data));
|
209
|
-
sx = cos(rad) * j - sin(rad) * i;
|
210
|
-
sy = sin(rad) * j + cos(rad) * i;
|
211
|
-
for(py=(int)sy-1; py<=(int)sy+2; py++){
|
212
|
-
for(px=(int)sx-1; px<=(int)sx+2; px++){
|
213
|
-
dx = fabs(sx-px);
|
214
|
-
dy = fabs(sy-py);
|
215
|
-
wx = (dx<1) ? (dx-1)*(dx*dx-dx-1) : -(dx-1)*(dx-2)*(dx-2);
|
216
|
-
wy = (dy<1) ? (dy-1)*(dy*dy-dy-1) : -(dy-1)*(dy-2)*(dy-2);
|
217
|
-
x0 = (px<0 || px>pkl->width -1) ? sx : px;
|
218
|
-
y0 = (py<0 || py>pkl->height-1) ? sy : py;
|
219
|
-
|
220
|
-
if(x0>=0 && x0<pkl->width && y0>=0 && y0<pkl->height){
|
221
|
-
for(k=0; k<pkl->channel; k++)
|
222
|
-
data[k] += pkl->image[(y0*pkl->width+x0)*pkl->channel+k]*wx*wy;
|
223
|
-
}
|
224
|
-
}
|
225
|
-
}
|
226
|
-
|
227
|
-
if(sx>=0 && sx<pkl->width && sy>=0 && sy<pkl->height){
|
228
|
-
for(k=0; k<pkl->channel; k++)
|
229
|
-
wrk[((i-rect.top)*width+j-rect.left)*pkl->channel+k] = PKL_COLOR_CLIP(data[k]);
|
230
|
-
}else{
|
231
|
-
memcpy(&wrk[((i-rect.top)*width+j-rect.left)*pkl->channel], back, pkl->channel);
|
232
|
-
}
|
233
|
-
}
|
234
|
-
}
|
235
|
-
|
236
|
-
free(pkl->image);
|
237
|
-
pkl->image = wrk;
|
238
|
-
pkl->width = width;
|
239
|
-
pkl->height = height;
|
240
|
-
return(0);
|
241
|
-
}
|
242
|
-
|
243
|
-
////=============================================================================
|
244
|
-
//// pkl_rotate_pa
|
245
|
-
////=============================================================================
|
246
|
-
//static int pkl_rotate_pa(PKLImage pkl, float angle, int backcolor)
|
247
|
-
//{
|
248
|
-
// int width, height;
|
249
|
-
// PIKL_RECT rect;
|
250
|
-
// float rad;
|
251
|
-
// unsigned char *wrk, back[4];
|
252
|
-
// int i, j;
|
253
|
-
// double zx, zy, power;
|
254
|
-
//
|
255
|
-
// rad = -angle*M_PI/180;
|
256
|
-
// get_rect(&rect, pkl->width, pkl->height, rad);
|
257
|
-
// width = rect.right - rect.left;
|
258
|
-
// height = rect.bottom - rect.top;
|
259
|
-
//
|
260
|
-
// wrk = malloc(width * height * pkl->channel);
|
261
|
-
// if(!wrk) return(1);
|
262
|
-
// memset(wrk, 0, width*height*pkl->channel);
|
263
|
-
//
|
264
|
-
// for(i=0; i<pkl->channel; i++)
|
265
|
-
// back[i] = (backcolor>>((pkl->channel-i)*8) & 0xFF);
|
266
|
-
//
|
267
|
-
// zx = (double)pkl->width / (double)width;
|
268
|
-
// zy = (double)pkl->height / (double)height;
|
269
|
-
// //���_�����������ϒl�Z�o�l
|
270
|
-
// power= zx*zy + (zx*zy * angle*M_PI/180 * angle*M_PI/180);
|
271
|
-
//
|
272
|
-
// for(i=rect.top; i<rect.bottom; i++){
|
273
|
-
// for(j=rect.left; j<rect.right; j++){
|
274
|
-
// double w1, w2, h1, h2;
|
275
|
-
// double w1b, w2b, h1b, h2b;
|
276
|
-
// double bi, ixg[PKL_CHANNEL] = {0.0, 0.0, 0.0, 0.0};
|
277
|
-
// int fsx ,fsy, s, t, k;
|
278
|
-
//
|
279
|
-
// w1b = modf(cos(rad)*j -sin(rad)*i, &w1);
|
280
|
-
// w2b = modf(cos(rad)*(j+1)-sin(rad)*i, &w2);
|
281
|
-
// h1b = modf(sin(rad)*j +cos(rad)*i, &h1);
|
282
|
-
// h2b = modf(sin(rad)*j+cos(rad)*(i+1), &h2);
|
283
|
-
//
|
284
|
-
// for(s=(int)w1; s<=(int)w2; s++){
|
285
|
-
// for(t=(int)h1; t<=(int)h2; t++){
|
286
|
-
// bi = 1.0;
|
287
|
-
// if(s == (int)w1) bi*=(1-w1b);
|
288
|
-
// if(s == (int)w2) bi*=(w2b);
|
289
|
-
// if(t == (int)h1) bi*=(1-h1b);
|
290
|
-
// if(t == (int)h2) bi*=(h2b);
|
291
|
-
// fsx = (s < 0) ? 0 : (s > pkl->width -1) ? pkl->width -1 : s;
|
292
|
-
// fsy = (t < 0) ? 0 : (t > pkl->height-1) ? pkl->height-1 : t;
|
293
|
-
// for(k=0; k<pkl->channel; k++)
|
294
|
-
// ixg[k] += pkl->image[(fsy*pkl->width+fsx)*pkl->channel+k] * bi;
|
295
|
-
// }
|
296
|
-
// }
|
297
|
-
//
|
298
|
-
// if((int)w1>=0 && (int)w1<pkl->width && (int)h1>=0 && (int)h1<pkl->height){
|
299
|
-
// for(k=0; k<pkl->channel; k++)
|
300
|
-
// wrk[((i-rect.top)*width+j-rect.left)*pkl->channel+k] = PKL_RGB(ixg[k]/power);
|
301
|
-
// }else{
|
302
|
-
// memcpy(&wrk[((i-rect.top)*width+j-rect.left)*pkl->channel], back, pkl->channel);
|
303
|
-
// }
|
304
|
-
//
|
305
|
-
// }
|
306
|
-
// }
|
307
|
-
// free(pkl->image);
|
308
|
-
// pkl->image = wrk;
|
309
|
-
// pkl->width = width;
|
310
|
-
// pkl->height = height;
|
311
|
-
// return(0);
|
312
|
-
//}
|
data/ext/pikl/pikl_rotate2.h
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
#ifndef _LIB_PIKL_ROTATE2_
|
2
|
-
#define _LIB_PIKL_ROTATE2_
|
3
|
-
|
4
|
-
#include <stdio.h>
|
5
|
-
#include <stdlib.h>
|
6
|
-
#include <string.h>
|
7
|
-
#include <math.h>
|
8
|
-
#include "pikl.h"
|
9
|
-
#include "pikl_private.h"
|
10
|
-
|
11
|
-
typedef struct{
|
12
|
-
int left;
|
13
|
-
int top;
|
14
|
-
int right;
|
15
|
-
int bottom;
|
16
|
-
} PIKL_RECT;
|
17
|
-
|
18
|
-
#endif
|
19
|
-
|
data/ext/pikl/pikl_trim.c
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
#include "pikl_trim.h"
|
2
|
-
|
3
|
-
//=================================================================================
|
4
|
-
// pkl_trim
|
5
|
-
//=================================================================================
|
6
|
-
PKLExport int pkl_trim(PKLImage pkl, int sx, int sy, int width, int height)
|
7
|
-
{
|
8
|
-
unsigned char *wrk;
|
9
|
-
int p, y;
|
10
|
-
|
11
|
-
if( sx < 0 || sy < 0 || width <= 0 || height <= 0 ) return(1);
|
12
|
-
if( sx+width > pkl->width ) return(1);
|
13
|
-
if( sy+height > pkl->height ) return(1);
|
14
|
-
|
15
|
-
wrk = malloc(height * width * pkl->channel);
|
16
|
-
if(!wrk) return(1);
|
17
|
-
|
18
|
-
for(p=0,y=sy; y<sy+height; p++,y++){
|
19
|
-
memcpy(&wrk[p*width*pkl->channel], &pkl->image[(y*pkl->width+sx)*pkl->channel], width*pkl->channel);
|
20
|
-
}
|
21
|
-
|
22
|
-
free(pkl->image);
|
23
|
-
pkl->image = wrk;
|
24
|
-
pkl->height = height;
|
25
|
-
pkl->width = width;
|
26
|
-
|
27
|
-
return(0);
|
28
|
-
}
|