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.
Files changed (75) hide show
  1. data/History.txt +9 -0
  2. data/License.txt +0 -0
  3. data/Manifest.txt +17 -17
  4. data/README.txt +0 -0
  5. data/config/hoe.rb +9 -6
  6. data/config/requirements.rb +0 -0
  7. data/ext/pikl/pikl.h +617 -465
  8. data/ext/pikl/pikl_affine.c +38 -91
  9. data/ext/pikl/pikl_affine.h +0 -0
  10. data/ext/pikl/pikl_bitmap.c +0 -0
  11. data/ext/pikl/pikl_bitmap.h +0 -0
  12. data/ext/pikl/pikl_blur.c +4 -8
  13. data/ext/pikl/pikl_blur.h +0 -0
  14. data/ext/pikl/pikl_camera.c +218 -0
  15. data/ext/pikl/{pikl_effect3.h → pikl_camera.h} +2 -2
  16. data/ext/pikl/pikl_composite.c +175 -0
  17. data/ext/pikl/pikl_composite.h +12 -0
  18. data/ext/pikl/pikl_decrease.c +110 -45
  19. data/ext/pikl/pikl_decrease.h +0 -7
  20. data/ext/pikl/pikl_divide.c +116 -0
  21. data/ext/pikl/pikl_divide.h +11 -0
  22. data/ext/pikl/pikl_effect.c +583 -151
  23. data/ext/pikl/pikl_effect.h +32 -6
  24. data/ext/pikl/pikl_enhance.c +274 -0
  25. data/ext/pikl/pikl_enhance.h +20 -0
  26. data/ext/pikl/pikl_io.c +174 -23
  27. data/ext/pikl/pikl_io.h +0 -0
  28. data/ext/pikl/pikl_jpeg.c +0 -0
  29. data/ext/pikl/pikl_jpeg.h +0 -0
  30. data/ext/pikl/pikl_pattern.c +383 -357
  31. data/ext/pikl/pikl_pattern.h +0 -0
  32. data/ext/pikl/pikl_pixel.c +173 -0
  33. data/ext/pikl/{pikl_trim.h → pikl_pixel.h} +2 -2
  34. data/ext/pikl/pikl_png.c +0 -0
  35. data/ext/pikl/pikl_png.h +0 -0
  36. data/ext/pikl/pikl_private.h +12 -5
  37. data/ext/pikl/pikl_resize.c +0 -0
  38. data/ext/pikl/pikl_resize.h +0 -0
  39. data/ext/pikl/pikl_rotate.c +409 -51
  40. data/ext/pikl/pikl_rotate.h +8 -0
  41. data/ext/pikl/pikl_scrap.c +263 -483
  42. data/ext/pikl/pikl_scrap.h +0 -0
  43. data/ext/pikl/pikl_special.c +168 -0
  44. data/ext/pikl/{pikl_effect4.h → pikl_special.h} +2 -2
  45. data/ext/pikl/pikl_voronoi.c +320 -0
  46. data/ext/pikl/pikl_voronoi.h +37 -0
  47. data/lib/pikl.rb +4 -2
  48. data/lib/pikl/color.rb +47 -0
  49. data/lib/pikl/const.rb +106 -22
  50. data/lib/pikl/errors.rb +0 -0
  51. data/lib/pikl/ext.rb +115 -8
  52. data/lib/pikl/filter.rb +371 -0
  53. data/lib/pikl/image.rb +124 -117
  54. data/lib/pikl/pikl.dll +0 -0
  55. data/lib/pikl/version.rb +2 -2
  56. data/setup.rb +0 -0
  57. data/test/sample.jpg +0 -0
  58. data/test/test_helper.rb +0 -0
  59. data/test/test_pikl_image.rb +0 -14
  60. data/test/test_pikl_image2.rb +541 -0
  61. metadata +35 -23
  62. data/ext/pikl/decrease/fsdither.h +0 -554
  63. data/ext/pikl/decrease/median.c +0 -1179
  64. data/ext/pikl/decrease/median.h +0 -7
  65. data/ext/pikl/decrease/neuquan5.c +0 -563
  66. data/ext/pikl/decrease/neuquant.h +0 -62
  67. data/ext/pikl/decrease/wu.c +0 -447
  68. data/ext/pikl/decrease/wu.h +0 -7
  69. data/ext/pikl/pikl_effect2.c +0 -240
  70. data/ext/pikl/pikl_effect2.h +0 -55
  71. data/ext/pikl/pikl_effect3.c +0 -266
  72. data/ext/pikl/pikl_effect4.c +0 -495
  73. data/ext/pikl/pikl_rotate2.c +0 -312
  74. data/ext/pikl/pikl_rotate2.h +0 -19
  75. data/ext/pikl/pikl_trim.c +0 -28
@@ -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
- //}
@@ -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
- }