pikl 0.2.8 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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/extconf.rb +0 -0
  8. data/ext/pikl/pikl.h +617 -465
  9. data/ext/pikl/pikl_affine.c +38 -91
  10. data/ext/pikl/pikl_affine.h +0 -0
  11. data/ext/pikl/pikl_bitmap.c +0 -0
  12. data/ext/pikl/pikl_bitmap.h +0 -0
  13. data/ext/pikl/pikl_blur.c +4 -8
  14. data/ext/pikl/pikl_blur.h +0 -0
  15. data/ext/pikl/pikl_camera.c +218 -0
  16. data/ext/pikl/{pikl_effect3.h → pikl_camera.h} +2 -2
  17. data/ext/pikl/pikl_composite.c +175 -0
  18. data/ext/pikl/pikl_composite.h +12 -0
  19. data/ext/pikl/pikl_decrease.c +110 -45
  20. data/ext/pikl/pikl_decrease.h +0 -7
  21. data/ext/pikl/pikl_divide.c +116 -0
  22. data/ext/pikl/pikl_divide.h +11 -0
  23. data/ext/pikl/pikl_effect.c +583 -151
  24. data/ext/pikl/pikl_effect.h +32 -6
  25. data/ext/pikl/pikl_enhance.c +274 -0
  26. data/ext/pikl/pikl_enhance.h +20 -0
  27. data/ext/pikl/pikl_io.c +174 -23
  28. data/ext/pikl/pikl_io.h +0 -0
  29. data/ext/pikl/pikl_jpeg.c +0 -0
  30. data/ext/pikl/pikl_jpeg.h +0 -0
  31. data/ext/pikl/pikl_pattern.c +383 -357
  32. data/ext/pikl/pikl_pattern.h +0 -0
  33. data/ext/pikl/pikl_pixel.c +173 -0
  34. data/ext/pikl/{pikl_trim.h → pikl_pixel.h} +2 -2
  35. data/ext/pikl/pikl_png.c +0 -0
  36. data/ext/pikl/pikl_png.h +0 -0
  37. data/ext/pikl/pikl_private.h +12 -5
  38. data/ext/pikl/pikl_resize.c +0 -0
  39. data/ext/pikl/pikl_resize.h +0 -0
  40. data/ext/pikl/pikl_rotate.c +409 -51
  41. data/ext/pikl/pikl_rotate.h +8 -0
  42. data/ext/pikl/pikl_scrap.c +263 -483
  43. data/ext/pikl/pikl_scrap.h +0 -0
  44. data/ext/pikl/pikl_special.c +168 -0
  45. data/ext/pikl/{pikl_effect4.h → pikl_special.h} +2 -2
  46. data/ext/pikl/pikl_voronoi.c +320 -0
  47. data/ext/pikl/pikl_voronoi.h +37 -0
  48. data/lib/pikl.rb +4 -2
  49. data/lib/pikl/color.rb +47 -0
  50. data/lib/pikl/const.rb +106 -22
  51. data/lib/pikl/errors.rb +0 -0
  52. data/lib/pikl/ext.rb +115 -8
  53. data/lib/pikl/filter.rb +371 -0
  54. data/lib/pikl/image.rb +124 -117
  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,3 +1,12 @@
1
+ == 0.3.0
2
+
3
+ * Create color object in C,
4
+ * Add some effects and utils.
5
+
6
+ == 0.2.8
7
+
8
+ * Bug Fix effect functions
9
+
1
10
  == 0.2.7
2
11
 
3
12
  * Bug Fix parsing extension.
File without changes
@@ -4,13 +4,6 @@ Manifest.txt
4
4
  README.txt
5
5
  config/hoe.rb
6
6
  config/requirements.rb
7
- ext/pikl/decrease/fsdither.h
8
- ext/pikl/decrease/median.c
9
- ext/pikl/decrease/median.h
10
- ext/pikl/decrease/neuquan5.c
11
- ext/pikl/decrease/neuquant.h
12
- ext/pikl/decrease/wu.c
13
- ext/pikl/decrease/wu.h
14
7
  ext/pikl/extconf.rb
15
8
  ext/pikl/pikl.h
16
9
  ext/pikl/pikl_affine.c
@@ -19,22 +12,26 @@ ext/pikl/pikl_bitmap.c
19
12
  ext/pikl/pikl_bitmap.h
20
13
  ext/pikl/pikl_blur.c
21
14
  ext/pikl/pikl_blur.h
15
+ ext/pikl/pikl_camera.c
16
+ ext/pikl/pikl_camera.h
17
+ ext/pikl/pikl_composite.c
18
+ ext/pikl/pikl_composite.h
22
19
  ext/pikl/pikl_decrease.c
23
20
  ext/pikl/pikl_decrease.h
21
+ ext/pikl/pikl_divide.c
22
+ ext/pikl/pikl_divide.h
24
23
  ext/pikl/pikl_effect.c
25
24
  ext/pikl/pikl_effect.h
26
- ext/pikl/pikl_effect2.c
27
- ext/pikl/pikl_effect2.h
28
- ext/pikl/pikl_effect3.c
29
- ext/pikl/pikl_effect3.h
30
- ext/pikl/pikl_effect4.c
31
- ext/pikl/pikl_effect4.h
25
+ ext/pikl/pikl_enhance.c
26
+ ext/pikl/pikl_enhance.h
32
27
  ext/pikl/pikl_io.c
33
28
  ext/pikl/pikl_io.h
34
29
  ext/pikl/pikl_jpeg.c
35
30
  ext/pikl/pikl_jpeg.h
36
31
  ext/pikl/pikl_pattern.c
37
32
  ext/pikl/pikl_pattern.h
33
+ ext/pikl/pikl_pixel.c
34
+ ext/pikl/pikl_pixel.h
38
35
  ext/pikl/pikl_png.c
39
36
  ext/pikl/pikl_png.h
40
37
  ext/pikl/pikl_private.h
@@ -42,16 +39,18 @@ ext/pikl/pikl_resize.c
42
39
  ext/pikl/pikl_resize.h
43
40
  ext/pikl/pikl_rotate.c
44
41
  ext/pikl/pikl_rotate.h
45
- ext/pikl/pikl_rotate2.c
46
- ext/pikl/pikl_rotate2.h
47
42
  ext/pikl/pikl_scrap.c
48
43
  ext/pikl/pikl_scrap.h
49
- ext/pikl/pikl_trim.c
50
- ext/pikl/pikl_trim.h
44
+ ext/pikl/pikl_special.c
45
+ ext/pikl/pikl_special.h
46
+ ext/pikl/pikl_voronoi.c
47
+ ext/pikl/pikl_voronoi.h
51
48
  lib/pikl.rb
49
+ lib/pikl/color.rb
52
50
  lib/pikl/const.rb
53
51
  lib/pikl/errors.rb
54
52
  lib/pikl/ext.rb
53
+ lib/pikl/filter.rb
55
54
  lib/pikl/image.rb
56
55
  lib/pikl/pikl.dll
57
56
  lib/pikl/version.rb
@@ -59,3 +58,4 @@ setup.rb
59
58
  test/sample.jpg
60
59
  test/test_helper.rb
61
60
  test/test_pikl_image.rb
61
+ test/test_pikl_image2.rb
data/README.txt CHANGED
File without changes
@@ -44,13 +44,16 @@ class Hoe
44
44
  end
45
45
 
46
46
  def spec= s
47
-
48
- if PACKAGE_PLATFORM =~ /mswin32/
49
- s.files = s.files.reject! {|f| f =~ /extconf\.rb/ }
50
- else
51
- s.files = s.files.reject! {|f| f =~ /pikl\.dll/ }
47
+
48
+ if s != nil
49
+ if PACKAGE_PLATFORM =~ /mswin32/
50
+ s.files = s.files.reject! {|f| f =~ /extconf\.rb/ }
51
+ else
52
+ s.files = s.files.reject! {|f| f =~ /pikl\.dll/ }
53
+ end
54
+ @spec = s
52
55
  end
53
- @spec = s
56
+
54
57
  end
55
58
  end
56
59
 
File without changes
File without changes
@@ -1,10 +1,20 @@
1
- /*=============================================================================
2
- ImageLibrary 'pikl'
3
- author: soe(soezimaster@gmail.com)
4
- date: 2008.4
5
- ===============================================================================*/
6
- #ifndef _LIB_PIKL_
7
- #define _LIB_PIKL_
1
+ //=============================================================================
2
+ // ImageLibrary 'pikl'
3
+ // author: soe(soezimaster@gmail.com)
4
+ // date: 2008.4
5
+ // update: 2008.11
6
+ // thanks.
7
+ // MemoNyanDum(http://junki.lix.jp/)
8
+ // C言語で実装する画像処理アルゴリズムのすべて-画像処理プログラミング
9
+ // Sharaku Image Manipulation Program(http://www21.atwiki.jp/submarine/)
10
+ // http://www.geocities.com/SiliconValley/Program/8979/color/index.htm
11
+ // http://www.teu.ac.jp/clab/kondo/research/jimmy
12
+ // http://www.sm.rim.or.jp/~shishido
13
+ // adobe gil
14
+ // Ryota Maruko
15
+ //=============================================================================
16
+ #ifndef _PIKL_
17
+ #define _PIKL_
8
18
 
9
19
  #ifdef WIN32
10
20
  #define PKLExport __declspec(dllexport)
@@ -17,25 +27,26 @@
17
27
  extern "C" {
18
28
  #endif
19
29
 
20
- #define PKL_VERSION "libpikl 0.3.2"
30
+ #include <stdio.h>
31
+
32
+ #define PKL_VERSION "libpikl 3.0.8"
21
33
 
22
- // PKLImage
34
+ // PKL object
23
35
  typedef struct _PKLImage * PKLImage;
36
+ typedef struct _PKLColor * PKLColor;
24
37
 
25
- //=============================================================================
38
+ //---------------------------------------------------------------------------------------
26
39
  // support format & color
27
40
  // JPEG:
28
41
  // gray/rgb/cmyk
29
42
  // * color-typeのYCbCrおよびYCCには読み取りも保存も対応していない
30
- //
31
43
  // PNG:
32
44
  // gray/gray-alpha/rgb/rgb-alpha/palette
33
45
  // * alphaは読取は可能だが、保存はできない
34
46
  // * paletteはRGBとして扱われる
35
- //
36
47
  // BMP(windows bitmap):
37
- // 24bit + non-compress only
38
- //=============================================================================
48
+ // 24bit and non-compress only
49
+ //---------------------------------------------------------------------------------------
39
50
  typedef enum {
40
51
  PKL_FORMAT_ERROR, // error
41
52
  PKL_FORMAT_JPEG, // jpeg
@@ -54,396 +65,341 @@ typedef enum {
54
65
  PKL_YCCK // non support
55
66
  } PKL_COLOR_SPACE;
56
67
 
57
- //=============================================================================
58
- // 回転角度(右回り)
59
- // * pkl_rotateで使用
60
- //=============================================================================
61
- typedef enum {
62
- PKL_ANGLE_000,
63
- PKL_ANGLE_090,
64
- PKL_ANGLE_180,
65
- PKL_ANGLE_270
66
- } PKL_ANGLE;
67
-
68
- //=============================================================================
68
+ //---------------------------------------------------------------------------------------
69
69
  // サンプリングパターン
70
70
  // * 全てのサンプリングパターンで拡大縮小対応
71
- // * 但し、pixcel-averageで拡大をする場合は、lanczosと品質は同じ
72
- //=============================================================================
71
+ // * 但し、pixel-averageで拡大をする場合は、lanczosと品質は同じ
72
+ //---------------------------------------------------------------------------------------
73
73
  typedef enum {
74
74
  PKL_SAMPLE_ERROR,
75
75
  PKL_SAMPLE_NN, // nearest neighbor
76
76
  PKL_SAMPLE_BL, // bilinear
77
77
  PKL_SAMPLE_BC, // bicubic
78
- PKL_SAMPLE_PA, // pixcel-average
78
+ PKL_SAMPLE_PA, // pixel-average
79
79
  PKL_SAMPLE_LZ // lanczos
80
80
  } PKL_SAMPLE;
81
81
 
82
- //=============================================================================
83
- // method
84
- //=============================================================================
85
- /*!
86
- PKLImageを構築します。<br>
87
- エラーが発生した場合は、NULLが返ります。<br>
88
- @param in [in] ロードする画像
89
- @return 成功した場合は、PKLImageのポインタが返ります。失敗したときはNULLが返ります。
90
- */
82
+ //---------------------------------------------------------------------------------------
83
+ // 表色系定義
84
+ //---------------------------------------------------------------------------------------
85
+ typedef enum {
86
+ PKL_GRAY,
87
+ PKL_RED,
88
+ PKL_GREEN,
89
+ PKL_BLUE,
90
+ PKL_CYAN,
91
+ PKL_MAGENTA,
92
+ PKL_YELLOW,
93
+ PKL_BLACK
94
+ } PKL_COLOR_MODEL;
95
+
96
+ /** macros **/
97
+ //#define pkl_color(a,b,c,d) ((a<<24)+(b<<16)+(c<<8)+d)
98
+
99
+ /*************************************************************/
100
+ /** utility **/
101
+ /*************************************************************/
102
+ //---------------------------------------------------------------------------------------
103
+ // 表色系に応じたカラーオブジェクトを作る
104
+ // _gray,_rgb,_cmykはpkl_color_createのエイリアスです
105
+ //---------------------------------------------------------------------------------------
106
+ PKLExport PKLColor pkl_color_gray(unsigned char gray);
107
+ PKLExport PKLColor pkl_color_rgb(unsigned char red, unsigned char green, unsigned char blue);
108
+ PKLExport PKLColor pkl_color_cmyk(unsigned char c, unsigned char m, unsigned char y, unsigned char k);
109
+ PKLExport PKLColor pkl_color_create(unsigned char a, unsigned char b, unsigned char c, unsigned char d);
110
+
111
+ //---------------------------------------------------------------------------------------
112
+ // ターゲットピクセルの表色系に応じた色情報を取得・設定する
113
+ // 指定したPKL_COLOR_MODELとイメージのカラースペースが一致しない場合は実行されません
114
+ //---------------------------------------------------------------------------------------
115
+ PKLExport unsigned char pkl_get_color(PKLImage pkl, int x, int y, PKL_COLOR_MODEL target);
116
+ PKLExport int pkl_set_color(PKLImage pkl, int x, int y, PKL_COLOR_MODEL target, unsigned char color);
117
+
118
+ //---------------------------------------------------------------------------------------
119
+ // ターゲットピクセルの色情報を取得・設定する
120
+ // 指定したPKL_COLOR_MODELとイメージのカラースペースが一致しない場合は実行されません
121
+ // * pkl_pixel_getによって取得したPKLColorはpkl_color_closeしてください
122
+ //---------------------------------------------------------------------------------------
123
+ PKLExport PKLColor pkl_get_pixel(PKLImage pkl, int x, int y);
124
+ PKLExport int pkl_set_pixel(PKLImage pkl, int x, int y, PKLColor color);
125
+
126
+ //---------------------------------------------------------------------------------------
127
+ // PKLColorから各色情報を取り出します
128
+ //---------------------------------------------------------------------------------------
129
+ PKLExport unsigned char pkl_color(PKLColor color, PKL_COLOR_MODEL target);
130
+
131
+ //---------------------------------------------------------------------------------------
132
+ // PKLColorオブジェクトの破棄
133
+ //---------------------------------------------------------------------------------------
134
+ PKLExport void pkl_color_close(PKLColor color);
135
+
136
+
137
+ /*************************************************************/
138
+ /** basic-method **/
139
+ /*************************************************************/
140
+ // PKLImageを構築
91
141
  PKLExport PKLImage pkl_open(const char *in);
92
142
 
93
- /*!
94
- 画像フォーマットを返します。<br>
95
- @param pkl [in] PKLImageオブジェクト
96
- @return PKL_FORMAT参照
97
- */
98
- PKLExport PKL_FORMAT pkl_format(PKLImage pkl);
143
+ //open済みファイルディスクリプタを指定
144
+ PKLExport PKLImage pkl_fdopen(FILE *in);
99
145
 
100
- /*!
101
- 画像の幅を返します。<br>
102
- @param pkl [in] PKLImageオブジェクト
103
- @return 画像の幅(ピクセル数)
104
- */
105
- PKLExport int pkl_width(PKLImage pkl);
146
+ // 保存
147
+ PKLExport int pkl_save(PKLImage pkl, const char *out, PKL_FORMAT format);
106
148
 
107
- /*!
108
- 画像の高さを返します。<br>
109
- @param pkl [in] PKLImageオブジェクト
110
- @return 画像の高さ(ピクセル数)
111
- */
112
- PKLExport int pkl_height(PKLImage pkl);
149
+ //open済みファイルディスクリプタを指定
150
+ PKLExport int pkl_output(PKLImage pkl, FILE *out, PKL_FORMAT format);
113
151
 
152
+ // PKLImageオブジェクトの破棄
153
+ PKLExport void pkl_close(PKLImage pkl);
114
154
 
115
- /*!
116
- PNG/JPEG保存時の圧縮率<br>
117
- @param pkl [in] PKLImageオブジェクト
118
- @param level [in]
119
- 0(無圧縮) .. 10(最高圧縮)。
120
- 指定がない場合は、デフォルトレベルが設定されます。
121
- @return 成功した場合は0。失敗した場合は真を返します。
122
- */
123
- PKLExport int pkl_compress(PKLImage pkl, int level);
155
+ // 画像フォーマット
156
+ PKLExport PKL_FORMAT pkl_format(PKLImage pkl);
124
157
 
125
- //=============================================================================
126
- // pkl_save
127
- //=============================================================================
128
- /*
129
- 保存<br>
130
- @param pkl [in] PKLImageオブジェクト
131
- @param out [in] 保存ファイル名
132
- @param format [in] 保存フォーマット(PKL_FORMAT参照)
133
- @return 成功した場合は0。失敗した場合は真を返します。
134
- */
135
- PKLExport int pkl_save(PKLImage pkl, const char *out, PKL_FORMAT format);
158
+ // 画像の幅・高さ
159
+ PKLExport int pkl_width(PKLImage pkl);
160
+ PKLExport int pkl_height(PKLImage pkl);
136
161
 
137
- //=============================================================================
138
- // pkl_close
139
- //=============================================================================
140
- /*!
141
- PKLImageオブジェクトの破棄<br>
142
- 確保していたメモリを全て解放します。用がなくなったら実行するようにしてください。
143
- @param pkl [in] PKLImageオブジェクト
144
- */
145
- PKLExport void pkl_close(PKLImage pkl);
162
+ // 色数を数える
163
+ // * 色数(CMYKの場合はCMYのみカウント)
164
+ PKLExport int pkl_count(PKLImage pkl);
146
165
 
166
+ // カラースペースを返す
167
+ PKLExport PKL_COLOR_SPACE pkl_colorspace(PKLImage pkl);
147
168
 
148
- /*!
149
- トリミングします。<br>
150
- ・パラメータは左上原点です。<br>
151
- ・パラメータは左上原点です。<br>
152
- ・左上原点はsx=0, sy=0になります。<br>
153
- @param pkl [in] PKLImageオブジェクト
154
- @param sx [in] 切り出し位置(x)
155
- @param sy [in] 切り出し位置(y)
156
- @param width [in] sxからの切り出す幅(ピクセル数)
157
- @param height [in] syからの切り出す高さ(ピクセル数)
158
- @return 成功した場合は0。失敗した場合は真を返します。
159
- */
160
- PKLExport int pkl_trim(PKLImage pkl, int sx, int sy, int width, int height);
169
+ // PNG/JPEG保存時の圧縮率を指示する
170
+ // level: 0(無圧縮) .. 10(最高圧縮)。
171
+ // 指定がない場合は、デフォルトレベルが設定される
172
+ PKLExport int pkl_compress(PKLImage pkl, int level);
161
173
 
162
- /*!
163
- 左回り90度単位で回転します。<br>
164
- @param pkl [in] PKLImageオブジェクト
165
- @param angle [in] 回転角度(PKL_ANGLE参照)
166
- @return 成功した場合は0。失敗した場合は真を返します。
167
- */
168
- PKLExport int pkl_rotate(PKLImage pkl, PKL_ANGLE angle);
174
+ // 新規のキャンバスを作る
175
+ // backcolor: NULLの時は白
176
+ PKLExport PKLImage pkl_canvas(int width, int height, PKL_COLOR_SPACE color, PKLColor backcolor);
169
177
 
170
- //#define pkl_color(a,b,c,d) ((a<<24)+(b<<16)+(c<<8)+d)
171
- //PKLExport int pkl_rotate2(PKLImage pkl, float angle, PKL_SAMPLE sample, int backcolor);
172
- PKLExport int pkl_rotate2(PKLImage pkl, float angle, PKL_SAMPLE sample,
173
- unsigned char a, unsigned char b, unsigned char c, unsigned char d);
174
-
175
- /*!
176
- 拡大・縮小します。<br>
177
- @param pkl [in] PKLImageオブジェクト
178
- @param width [in] 横方向の変形後サイズ(ピクセル数)
179
- @param height [in] 縦方向の変形後サイズ(ピクセル数)
180
- @param sample [in] サンプリングパターン(PKL_SAMPLE参照)
181
- @return 成功した場合は0。失敗した場合は真を返します。
182
- */
183
- PKLExport int pkl_resize(PKLImage pkl, int width, int height, PKL_SAMPLE sample);
178
+ // PKLImageの複製
179
+ PKLExport PKLImage pkl_dup(PKLImage pkl);
184
180
 
185
- //=============================================================================
186
- // affine変換
187
- //=============================================================================
188
- //*_scale = 変形率の逆数
189
- PKLExport void pkl_matrix_scale(PKLImage pkl, double x_scale, double y_scale);
190
181
 
191
- //angle=左回りの回転角度
192
- PKLExport void pkl_matrix_rotate(PKLImage pkl, double angle);
193
182
 
194
- //正数は上、左方向への移動
195
- PKLExport void pkl_matrix_translate(PKLImage pkl, int x, int y);
183
+ /*************************************************************/
184
+ /** basic-operation **/
185
+ /*************************************************************/
186
+ //---------------------------------------------------------------------------------------
187
+ // トリミング
188
+ // ・パラメータは左上原点です
189
+ // ・左上原点はsx=0, sy=0になります。
190
+ // sx: 切り出し位置(x)
191
+ // sy: 切り出し位置(y)
192
+ // width: sxからの切り出す幅(ピクセル数)
193
+ // height: syからの切り出す高さ(ピクセル数)
194
+ //---------------------------------------------------------------------------------------
195
+ PKLExport int pkl_trim(PKLImage pkl, int sx, int sy, int width, int height);
196
196
 
197
- PKLExport int pkl_affine(PKLImage pkl, PKL_SAMPLE sampler, int width, int height, int backcolor);
198
- //#define pkl_color(a,b,c,d) ((a<<24)+(b<<16)+(c<<8)+d)
197
+ //---------------------------------------------------------------------------------------
198
+ // 拡大・縮小
199
+ // width: 横方向の変形後サイズ(ピクセル数)
200
+ // height: 縦方向の変形後サイズ(ピクセル数)
201
+ // sample: サンプリングパターン(PKL_SAMPLE参照)
202
+ //---------------------------------------------------------------------------------------
203
+ PKLExport int pkl_resize(PKLImage pkl, int width, int height, PKL_SAMPLE sample);
199
204
 
200
- //=============================================================================
201
- // エフェクト(ベーシック)
202
- //=============================================================================
203
- /*!
204
- アンシャープ処理<br>
205
- @param pkl [in] PKLImageオブジェクト
206
- @param threshold [in]
207
- 適応量。0から255の範囲で指定します。
208
- 0の時:変化しません。
209
- 255の時:全ての色にアンシャープ処理が働きます
210
- @param edge [in]
211
- エッジ。想定結果が得られる範囲は-10 .. 10程度です。
212
- edge=0の時:変化しません。
213
- edge>0の時:値が大きいほど先鋭化されます。
214
- edge<0の時:値が小さいほどぼやけます。
215
-
216
- 想定結果が得られる範囲は-10 .. 10程度です。
217
- これを超える場合は、品質の保証はありません。
218
- ※画質によりこの通りではありません。-10..10の範囲より小さくなる可能性があります。
219
- @return 成功した場合は0。失敗した場合は真を返します。
220
- */
205
+ //---------------------------------------------------------------------------------------
206
+ // 回転
207
+ // angle: 右回転角度
208
+ // sample: サンプリングパターン(PKL_SAMPLE参照)
209
+ // angle: 背景色(NULLの時は白)
210
+ //---------------------------------------------------------------------------------------
211
+ PKLExport int pkl_rotate(PKLImage pkl, float angle, PKL_SAMPLE sample, PKLColor backcolor);
212
+
213
+ //---------------------------------------------------------------------------------------
214
+ // affine変換(from adobe gil)
215
+ // width, height: affine変換後のサイズ
216
+ // backcolor: 背景色(NULLの時は白)
217
+ // *_scale: 変形率の逆数
218
+ // angle : 左回りの回転角度
219
+ // x, y: 移動方向。正数は上、左方向への移動
220
+ //---------------------------------------------------------------------------------------
221
+ PKLExport int pkl_affine(PKLImage pkl, PKL_SAMPLE sampler, int width, int height, PKLColor backcolor,
222
+ double x_scale, double y_scale, double angle, int x, int y);
223
+
224
+
225
+ /*************************************************************/
226
+ /** enhance(一般的なフィルタ) **/
227
+ /*************************************************************/
228
+ //---------------------------------------------------------------------------------------
229
+ // アンシャープマスク
230
+ // threshold:
231
+ // 適応量(0-255)
232
+ // 0の時:変化しません。
233
+ // 255の時:全ての色にアンシャープ処理が働きます
234
+ // edge:
235
+ // エッジ。想定結果が得られる範囲は-10 .. 10程度です。
236
+ // edge=0の時:変化しません。
237
+ // edge>0の時:値が大きいほど先鋭化されます。
238
+ // edge<0の時:値が小さいほどぼやけます。
239
+ //
240
+ // 想定結果が得られる範囲は-10 .. 10程度です。
241
+ // これを超える場合は、品質の保証はありません。
242
+ // ※画質によりこの通りではありません。-10..10の範囲より小さくなる可能性があります。
243
+ //---------------------------------------------------------------------------------------
221
244
  PKLExport int pkl_unsharp(PKLImage pkl, int threshold, double edge);
222
245
 
223
- /*!
224
- コントラスト調整<br>
225
- @param pkl [in] PKLImageオブジェクト
226
- @param rate [in]
227
- 調整係数。-127 .. 127の範囲で指定します。<br>
228
- 0の時:変化しません。
229
- * rateが0以上の時は周波数によるコントラスト強調がおこなわれます。
230
- * rateが0未満の時は直線的に平坦化されます。
231
- @return 成功した場合は0。失敗した場合は真を返します。
232
- */
246
+ //---------------------------------------------------------------------------------------
247
+ // コントラスト調整
248
+ // rate: 調整係数(-127 - 127)
249
+ // 0の時:変化しません。
250
+ // * rateが0以上の時は周波数によるコントラスト強調がおこなわれます。
251
+ // * rateが0未満の時は直線的に平坦化されます。
252
+ //---------------------------------------------------------------------------------------
233
253
  PKLExport int pkl_contrast(PKLImage pkl, int rate);
234
254
 
235
- /*!
236
- レベル補正<br>
237
- ヒストグラムの平坦化をおこないます。各色の分布に偏りがある画像に有効な場合があります。
238
- @param pkl [in] PKLImageオブジェクト
239
- @param low [in]
240
- 全ピクセル数に対して、切り捨てる暗い色の総数の割合(0-100%)
241
- @param high [in]
242
- 全ピクセル数に対して、切り捨てる明るい色の総数の割合(0-100%)
243
- @param coeff [in]
244
- 平坦化時の係数。
245
- 1が標準です。1より小さい場合は暗く、1より大きい場合は明るくなります(0.0..2.0)
246
- @return 成功した場合は0。失敗した場合は真を返します。
247
- */
255
+ //---------------------------------------------------------------------------------------
256
+ // レベル補正
257
+ // ヒストグラムの平坦化をおこないます。各色の分布に偏りがある画像に有効な場合があります。
258
+ // low: 全ピクセル数に対して、切り捨てる暗い色の総数の割合(0-100%)
259
+ // high: 全ピクセル数に対して、切り捨てる明るい色の総数の割合(0-100%)
260
+ // coeff: 平坦化時の係数。
261
+ // 1が標準です。1より小さい場合は暗く、1より大きい場合は明るくなります(0.0..2.0)
262
+ //---------------------------------------------------------------------------------------
248
263
  PKLExport int pkl_level(PKLImage pkl, double low, double high, double coeff);
249
264
 
250
- /*!
251
- 明るさ調整<br>
252
- 各色にcolor値を加算する単純な処理です。
253
- @param pkl [in] PKLImageオブジェクト
254
- @param color [in]
255
- 各色に加算する色。
256
- 255を指定すれば、ただの白い画像になります。
257
- -255を指定すると、ただの黒い画像になります。
258
- @return 成功した場合は0。失敗した場合は真を返します。
259
- */
265
+ //---------------------------------------------------------------------------------------
266
+ // 明るさ調整
267
+ // 各色にcolor値を加算する単純な処理です。
268
+ // color:
269
+ // 各色に加算する色。
270
+ // 255を指定すれば、ただの白い画像になります。
271
+ // -255を指定すると、ただの黒い画像になります。
272
+ //---------------------------------------------------------------------------------------
260
273
  PKLExport int pkl_brightness(PKLImage pkl, int color);
261
274
 
262
- /*!
263
- 輝度(明るさ)・彩度(鮮やかさ)・色相(色合い)調整<br>
264
- @param pkl [in] PKLImageオブジェクト
265
- @param ym [in]
266
- 輝度(-1..1)。
267
- +0.1で10%up。
268
- 0.0は変化なし
269
- @param sm [in]
270
- 彩度(-1..1)。
271
- +0.1で10%up。
272
- 0.0は変化なし
273
- @param hd [in]
274
- 色相(360度回転)。
275
- 360度の倍数では変化しません。
276
- 参考:R=113.2/Ye=173.0/G=225.0/Cy=293.2/B=353.0/Mg=45.0
277
- @return 成功した場合は0。失敗した場合は真を返します。
278
- */
275
+ //---------------------------------------------------------------------------------------
276
+ // 輝度(明るさ)・彩度(鮮やかさ)・色相(色合い)調整
277
+ // ym: 輝度(-1..1)。+0.1で10%up。0.0は変化なし
278
+ // sm: 彩度(-1..1)。+0.1で10%up。0.0は変化なし
279
+ // hd: 色相(360度回転)。360度の倍数では変化しません。
280
+ // 参考:R=113.2/Ye=173.0/G=225.0/Cy=293.2/B=353.0/Mg=45.0
281
+ //---------------------------------------------------------------------------------------
279
282
  PKLExport int pkl_hls(PKLImage pkl, double ym, double sm, double hd);
280
283
 
281
- /* ガンマ補正 */
282
- // gm: 補正係数(>=0.0)
283
- // gm<1.0:暗く調整される
284
- // gm=1.0:変化しない
285
- // gm>1.0:明るく調整される
284
+ //---------------------------------------------------------------------------------------
285
+ // ガンマ補正
286
+ // gm: 補正係数(>=0.0)
287
+ // gm<1.0:暗く調整される
288
+ // gm=1.0:変化しない
289
+ // gm>1.0:明るく調整される
290
+ //---------------------------------------------------------------------------------------
286
291
  PKLExport int pkl_gamma(PKLImage pkl, double gm);
287
292
 
288
- /* ノイズ除去(median filter) */
293
+ // ノイズ除去(median filter)
289
294
  PKLExport int pkl_noisecut(PKLImage pkl);
290
295
 
291
- //=============================================================================
292
- // エフェクト2
293
- //=============================================================================
294
- /* 反転 */
295
- PKLExport int pkl_invert(PKLImage pkl);
296
-
297
- //エッジ(輪郭)を強調する
298
- //unsharpは画像全体をシャープにするが、これはエッジ部分のみの強調
299
- typedef enum {
300
- PKL_FOCUS_DETAIL, //弱い
301
- PKL_FOCUS_FOCUS, //中間
302
- PKL_FOCUS_EDGES //強い
303
- } PKL_FOCUS;
304
- PKLExport int pkl_focus(PKLImage pkl, PKL_FOCUS type);
305
-
306
- //エンボス
307
- typedef enum {
308
- PKL_EMBOSS_EMBOSS, //エンボス1
309
- PKL_EMBOSS_HEAVY, //エンボス2
310
- PKL_EMBOSS_LIGHT, //エンボス3
311
- PKL_EMBOSS_LAPLACIAN //輪郭抽出
312
- } PKL_EMBOSS;
313
- PKLExport int pkl_emboss(PKLImage pkl, PKL_EMBOSS type);
314
-
315
296
 
316
- /* 画像の合成 */
317
- // parentの上にchildを乗せる
318
- // parent: ベース(処理後はこのオブジェクトが更新される)
319
- // child: 乗せる画像(このオブジェクトは処理しても不可侵)
320
- // xpos,ypos: childを乗せるparent上の座標.
321
- // 必ずparent上の座標でなければならない.
322
- // *parentとchildは同じカラーモードでなければエラーとなる
323
- PKLExport int pkl_composite(PKLImage parent, PKLImage child, int xpos, int ypos);
324
-
325
- /* 画像の合成2 */
326
- // pkl_composite()に加え、childイメージ上の1色を透明扱いにできる
327
- // parent: ベース(処理後はこのオブジェクトが更新される)
328
- // child: 乗せる画像(このオブジェクトは処理しても不可侵)
329
- // xpos,ypos: childを乗せるparent上の座標.
330
- // 必ずparent上の座標でなければならない.
331
- // transcolor: 透明にする色(pkl_colorマクロで生成する)
332
- // *parentとchildは同じカラーモードでなければエラーとなる
333
- PKLExport int pkl_composite2(PKLImage parent, PKLImage child, int xpos, int ypos, int transcolor);
334
-
335
- /* (安易な)セピア */
336
- // red_weight,green_weight,blue_weight:
337
- // red,green,blueそれぞれに対しての重み
338
- // 値が大きいほど、その色が強く出る
339
- // *RGBのみに対応
340
- // *セピアっぽくするのであれば、redの重みを1.0として、他の重みを1.0より小さくする
341
- PKLExport int pkl_sepia(PKLImage pkl, double red_weight, double green_weight, double blue_weight);
342
-
343
- /* (安易な)油絵化 */
344
- // 油絵のようにする
345
- // weight: 筆の太さ(というか最頻色走査領域のサイズ)
346
- // 例えば、3を指定した場合、近傍3x3の領域の最頻色が選択される
347
- // *weightを大きくしすぎると、処理が重くなる。注意せよ
348
- PKLExport int pkl_oilpaint(PKLImage pkl, int weight);
349
-
350
-
351
- //=============================================================================
352
- // Blur(ぼかし)
353
- //=============================================================================
354
- /* (安易な)ぼかし */
355
- // weight: 平均算出領域のサイズ
356
- // 例えば、3を指定した場合、近傍3x3の領域の平均色が選択される
357
- // 値が大きいほど、ぼかし度は強くなる。
297
+ /*************************************************************/
298
+ /** blur(ぼかし) **/
299
+ /*************************************************************/
300
+ //---------------------------------------------------------------------------------------
301
+ // (安易な)ぼかし
302
+ // weight: 平均算出領域のサイズ
303
+ // 例えば、3を指定した場合、近傍3x3の領域の平均色が選択される
304
+ // 値が大きいほど、ぼかし度は強くなる。
358
305
  // *weightを大きくしすぎると、処理が重くなる。注意せよ
306
+ //---------------------------------------------------------------------------------------
359
307
  PKLExport int pkl_blur(PKLImage pkl, int weight);
360
308
 
361
- /* ガウスぼかし */
362
- // ガウス関数を使ったぼかし。「画像全体にぼかしが入る」「方向がない」
309
+ //---------------------------------------------------------------------------------------
310
+ // ガウスぼかし
311
+ // ガウス関数を使ったぼかし。「画像全体にぼかしが入る」「方向がない」
363
312
  // weight: ぼかし強調度(>0.0)
364
313
  // 値が大きいほど、ぼかし度は強くなる。
365
314
  // *weightを大きくしすぎると、処理が重くなる。注意せよ
315
+ //---------------------------------------------------------------------------------------
366
316
  PKLExport int pkl_gaussblur(PKLImage pkl, double weight);
367
317
 
368
- /* 放射状ブラー(radiation) */
369
- // x,y: 放射の中心座標(画像範囲内にない場合は中心)
370
- // ef: 中心からの強調度(>0.0。値が大きいほど、放射度が強くなる)
371
- // weight: ぼかしの強調度(>0)
318
+ //---------------------------------------------------------------------------------------
319
+ // 放射状ブラー(radiation)
320
+ // x,y: 放射の中心座標(画像範囲内にない場合は中心)
321
+ // ef: 中心からの強調度(>0.0。値が大きいほど、放射度が強くなる)
322
+ // weight: ぼかしの強調度(>0)
372
323
  // *weightを大きくしすぎると、処理が重くなる。注意せよ
324
+ //---------------------------------------------------------------------------------------
373
325
  PKLExport int pkl_rblur(PKLImage pkl, int x, int y, double ef, int weight);
374
326
 
375
- /* 回転ブラー(angle) */
376
- // x,y: 放射の中心座標(画像範囲内にない場合は中心)
377
- // ef: 中心からの強調度(>0.0。値が大きいほど、放射度が強くなる)
378
- // weight: ぼかしの強調度(>0)
327
+ //---------------------------------------------------------------------------------------
328
+ // 回転ブラー(angle)
329
+ // x,y: 放射の中心座標(画像範囲内にない場合は中心)
330
+ // ef: 中心からの強調度(>0.0。値が大きいほど、放射度が強くなる)
331
+ // weight: ぼかしの強調度(>0)
379
332
  // *weightを大きくしすぎると、処理が重くなる。注意せよ
333
+ //---------------------------------------------------------------------------------------
380
334
  PKLExport int pkl_ablur(PKLImage pkl, int x, int y, double ef, int weight);
381
335
 
382
- /* うずまきブラー(whirlpool) */
383
- // x,y: 放射の中心座標(画像範囲内にない場合は中心)
384
- // ef: 中心からの強調度(>0.0。値が大きいほど、放射度が強くなる)
385
- // weight: ぼかしの強調度(>0)
386
- // angle: 回転角度(0は回転なし)
336
+ //---------------------------------------------------------------------------------------
337
+ // うずまきブラー(whirlpool)
338
+ // x,y: 放射の中心座標(画像範囲内にない場合は中心)
339
+ // ef: 中心からの強調度(>0.0。値が大きいほど、放射度が強くなる)
340
+ // weight: ぼかしの強調度(>0)
341
+ // angle: 回転角度(0は回転なし)
387
342
  // *weightを大きくしすぎると、処理が重くなる。注意せよ
343
+ //---------------------------------------------------------------------------------------
388
344
  PKLExport int pkl_wblur(PKLImage pkl, int x, int y, double ef, int weight, double angle);
389
345
 
390
- /* モーションブラー */
391
- // 任意角度での直線ブラー
346
+ //---------------------------------------------------------------------------------------
347
+ // モーションブラー(motion)
348
+ // 任意角度での直線ブラー
392
349
  // angle: ぼかす角度
393
350
  // range: ぼかし強調度
394
351
  // *weightを大きくしすぎると、処理が重くなる。注意せよ
352
+ //---------------------------------------------------------------------------------------
395
353
  PKLExport int pkl_mblur(PKLImage pkl, double angle, int weight);
396
354
 
397
355
 
398
- //**************************************************************************
399
- // エフェクト3(from 画像処理プログラミング)
400
- //**************************************************************************
401
- /* イラスト調 */
402
- // edge: エッジの重み(0が最もエッジが強い。0..20程度が目安)
403
- // gammaint: 絵柄のガンマ評価値(0:暗く評価、100:明るく評価。0..100)
404
- PKLExport int pkl_illust(PKLImage pkl, int edge, int gammaint);
405
-
406
- /* エンボス */
407
- // mil: ハイライト(1..400)
408
- // env: 環境光(1..100)
409
- PKLExport int pkl_color_emboss(PKLImage pkl, double mil, double env);
410
-
411
- /* モザイク処理 */
412
- // mx,my:モザイクのピクセルサイズ(それぞれ、幅・高さ)
413
- // 1以下の時には変化はありません
414
- // 画像サイズ以上の時には1色の画像になります
415
- PKLExport int pkl_mosaic(PKLImage pkl, int msx, int msy);
416
-
417
- /* ノイズ処理 */
418
- PKLExport int pkl_noise(PKLImage pkl, int noise);
419
-
420
- /* VTR調 */
421
- //colspace; //行の間隔
422
- //gst; //横方向のブレ
423
- //cst; //行の色差分
424
- PKLExport int pkl_vtr(PKLImage pkl, int colspace, int gst, int cst);
425
-
426
- //**************************************************************************
427
- // エフェクト4(実験シリーズ)
428
- //**************************************************************************
429
- /* 輪郭抽出 */
430
- PKLExport int pkl_edgepaint(PKLImage pkl);
356
+ /*************************************************************/
357
+ /** pattern **/
358
+ /*************************************************************/
359
+ //---------------------------------------------------------------------------------------
360
+ // パターン描画
361
+ // pw,ph: パターンのサイズ
362
+ // [六角形]phのサイズをpwの3倍に設定すると、縦横サイズが同じパターンになる
363
+ // [ひし形]phのサイズをpwの2倍に設定すると、縦横サイズが同じパターンになる
364
+ // ex1) pw=10,ph=10にすると横長のパターン
365
+ // ex2) pw=10,ph=20にすると縦横同じ大きさのパターン
366
+ // ex3) pw=10,ph=30にすると縦長のパターン
367
+ // [ 円 ]phのサイズをpwの3倍に設定すると、縦横サイズが同じパターンになる
368
+ // [レンガ]phのサイズをpwの4倍に設定すると、縦横サイズが同じパターンになる
369
+ // type: 塗り方式
370
+ //---------------------------------------------------------------------------------------
371
+ // パターンタイプ
372
+ typedef enum {
373
+ PKL_PATTERN_HEXAGON, //六角形(default)
374
+ PKL_PATTERN_DIAMOND, //ひし形
375
+ PKL_PATTERN_CIRCLE, //円
376
+ PKL_PATTERN_BRICK //レンガ
377
+ } PKL_PATTERN_TYPE;
431
378
 
432
- /* ポスタライズ(階調変更)→ブライトネス→ノイズ除去→輪郭抽出 */
433
- // level:階調数(1-256) *256を何分割するかということ
434
- // up: ポスタライズにより暗めの画像になってしまうので、ブライトネスで適用する色
435
- PKLExport int pkl_edgeposter(PKLImage pkl, int level, int up);
379
+ // パターンの塗り方式
380
+ typedef enum {
381
+ PKL_PAINT_LINE, //ライン(パターン内の横方向の平均で塗る)(default)
382
+ PKL_PAINT_AVE, //モザイク(パターン内の平均色で塗る)
383
+ } PKL_PAINT_TYPE;
436
384
 
385
+ PKLExport int pkl_pattern(PKLImage pkl, int pw, int ph, PKL_PATTERN_TYPE mode, PKL_PAINT_TYPE type);
437
386
 
438
- /* 格子のずらし配置 */
439
- // area:格子のサイズ
440
- // shift:格子をずらす範囲
441
- PKLExport int pkl_tileslit(PKLImage pkl, int area, int shift);
387
+ //---------------------------------------------------------------------------------------
388
+ // モザイク処理
389
+ // mx,my:モザイクのピクセルサイズ(それぞれ、幅・高さ)
390
+ // 1以下の時には変化はありません。画像サイズ以上の時には1色の画像になります
391
+ //---------------------------------------------------------------------------------------
392
+ PKLExport int pkl_mosaic(PKLImage pkl, int msx, int msy);
442
393
 
394
+ //---------------------------------------------------------------------------------------
395
+ // モザイク処理&2値化
396
+ // ms:モザイクのサイズ
397
+ //---------------------------------------------------------------------------------------
398
+ PKLExport int pkl_pixelate(PKLImage pkl, int ms);
443
399
 
444
- /* モザイクグリッド */
445
- // モザイク化した上でグリッド線を引く
446
- // <引数>
400
+ //---------------------------------------------------------------------------------------
401
+ // モザイクグリッド
402
+ // モザイク化した上でグリッド線を引く
447
403
  // msx,msy: モザイクのピクセルサイズ(それぞれ、幅・高さ)
448
404
  // color: グリッド線の調整値
449
405
  // グリッド線色は単色ではなく、モザイク領域の色を元に生成する
@@ -451,44 +407,187 @@ PKLExport int pkl_tileslit(PKLImage pkl, int area, int shift);
451
407
  // 0の時:モザイクと同色になり表出しない
452
408
  // 255の時:いわゆる白線
453
409
  // -255の時:いわゆる黒線
410
+ //---------------------------------------------------------------------------------------
454
411
  PKLExport int pkl_grid(PKLImage pkl, int msx, int msy, int color);
455
412
 
413
+ // お風呂のタイル風
414
+ typedef enum {
415
+ PKL_TILE_RECT, //四角形
416
+ PKL_TILE_HEXAGON, //六角形
417
+ PKL_TILE_DIAMOND, //ひし形
418
+ PKL_TILE_CIRCLE, //円
419
+ PKL_TILE_BRICK //レンガ
420
+ } PKL_TILE_TYPE;
421
+ PKLExport int pkl_tile(PKLImage pkl, PKL_TILE_TYPE type, int msx, int msy, unsigned char level);
422
+
423
+
424
+
425
+ /*************************************************************/
426
+ /** ボロノイ分割 **/
427
+ /*************************************************************/
428
+ //---------------------------------------------------------------------------------------
429
+ // ボロノイ分割(ゾーン指定)
430
+ // zone: ボロノイサイズ(>=2, <w,h)
431
+ // bordercolor: NULLの時は境界線を引かない。境界線色はpkl_color_createで作る
432
+ // test: 真 AND bordercolor!=NULLの時、分割シュミレーション図を出力する
433
+ //---------------------------------------------------------------------------------------
434
+ PKLExport int pkl_voronoi_zone(PKLImage pkl, int zone, PKLColor bordercolor, int test);
435
+
436
+ //---------------------------------------------------------------------------------------
437
+ // ボロノイ分割(母点数指定)
438
+ // count: 母点数(>=10)
439
+ // bordercolor: NULLの時は境界線を引かない。境界線色はpkl_color_createで作る
440
+ // test: 真 AND bordercolor!=NULLの時、分割シュミレーション図を出力する
441
+ //
442
+ // *zoneとの違いは、母点がよりランダムに配置されるという点
443
+ //---------------------------------------------------------------------------------------
444
+ PKLExport int pkl_voronoi_count(PKLImage pkl, int count, PKLColor bordercolor, int test);
445
+
446
+
447
+ /*************************************************************/
448
+ /** decrease **/
449
+ /** 色数を変える(減色・表色系変更) **/
450
+ /*************************************************************/
451
+ //---------------------------------------------------------------------------------------
452
+ // ポスタライズ(階調変更)
453
+ // level:階調数(1-256) *256を何分割するかということ
454
+ //---------------------------------------------------------------------------------------
455
+ PKLExport int pkl_posterize(PKLImage pkl, int level);
456
+
457
+ //---------------------------------------------------------------------------------------
458
+ // 色数削減
459
+ // 単純にlevelで指定した下位ビットを削除する。
460
+ // level: 無効にする下位ビット数(0-255)
461
+ //---------------------------------------------------------------------------------------
462
+ PKLExport int pkl_cutcolor(PKLImage pkl, int level);
456
463
 
457
- /* kuwahara(from MemoNyanDum) */
458
- // kuwaharaオペレータを使った抽象化で油絵のようになる。
459
- // pkl_oilpaint()との違いは、エッジがより鮮明であるという点。
460
- // <引数>
461
- // range: 調整領域(>=2)
462
- //
463
- // *rangeを大きくしすぎると、処理が重くなる。注意せよ
464
- PKLExport int pkl_kuwahara(PKLImage pkl, int range);
464
+ // CMYK→RGB
465
+ PKLExport int pkl_rgb(PKLImage pkl);
466
+
467
+ // RGB→GRAYSCALE
468
+ typedef enum {
469
+ PKL_GRAY_NRM, //加重平均法(最も一般的なグレースケール)
470
+ PKL_GRAY_MED, //中間値法
471
+ PKL_GRAY_AVE //単純平均法
472
+ } PKL_GRAYTYPE;
473
+ PKLExport int pkl_gray(PKLImage pkl, PKL_GRAYTYPE type);
474
+
475
+ // GRAYSCALE→2c
476
+ PKLExport int pkl_2c(PKLImage pkl, int threshold);
477
+
478
+
479
+ /*************************************************************/
480
+ /** divide(パターン分割) **/
481
+ /*************************************************************/
482
+ //---------------------------------------------------------------------------------------
483
+ // 格子のずらし配置
484
+ // area:格子のサイズ
485
+ // shift:格子をずらす範囲
486
+ //---------------------------------------------------------------------------------------
487
+ PKLExport int pkl_tileslit(PKLImage pkl, int area, int shift);
465
488
 
466
- /* アルファブレンド */
489
+ //---------------------------------------------------------------------------------------
490
+ // フォトフレーム分割
491
+ // イメージを分割し、フォトフレームのようにする
492
+ // backcolor: 背景色(NULLの時、白)
493
+ // wbs,hbs: オリジナルイメージの縦横分割数(>0)
494
+ // margin: キャンバスのマージン(上下左右の空間)(>0)
495
+ // frame: フレームの太さ(>=1)
496
+ //---------------------------------------------------------------------------------------
497
+ PKLExport int pkl_splitframe(PKLImage pkl, PKLColor backcolor, int wbs, int hbs, int margin, int frame);
498
+
499
+
500
+ /*************************************************************/
501
+ /** composite(合成) **/
502
+ /*************************************************************/
503
+ //---------------------------------------------------------------------------------------
504
+ // 画像の合成
505
+ // parentの上にchildを乗せる
506
+ // parent: ベース(処理後はこのオブジェクトが更新される)
507
+ // child: 乗せる画像(このオブジェクトは処理しても不可侵)
508
+ // xpos,ypos: childを乗せるparent上の座標.
509
+ // transcolor: 透明にする色。NULLの時は透明色の設定なし
510
+ // * parentとchildは同じカラーモードでなければエラーとなる
511
+ //---------------------------------------------------------------------------------------
512
+ PKLExport int pkl_composite(PKLImage parent, PKLImage child, int xpos, int ypos, PKLColor transcolor);
513
+
514
+ //---------------------------------------------------------------------------------------
515
+ // アルファブレンド
467
516
  // parentの上にchildをアルファブレンドで乗せる
468
- // <引数>
469
517
  // parent: ベース(処理後はこのオブジェクトが更新される)
470
518
  // child: 乗せる画像(このオブジェクトは処理しても不可侵)
471
519
  // xpos,ypos:childを乗せるparent上の座標.
472
- // 必ずparent上の座標でなければならない.
473
520
  // alpha: α値(0-255)
521
+ // alpha<0の時: 特殊モード(画像の縁ほどアルファを強調する)
474
522
  // alpha=0の時: childは100%で乗る
475
523
  // alpha=255の時:childは 0%で乗る
476
- // <注意>
477
- // parentとchildは同じカラーモードでなければエラーとなる
524
+ // * parentとchildは同じカラーモードでなければエラーとなる
525
+ //---------------------------------------------------------------------------------------
478
526
  PKLExport int pkl_alphablend(PKLImage parent, PKLImage child, int xpos, int ypos, int alpha);
479
527
 
480
- //アルファブレンド
481
- //1との違いは、画像全体に対してアルファを効かせるのでなく
482
- //画像の縁ほどアルファを強調するという点
483
- PKLExport int pkl_alphablend2(PKLImage parent, PKLImage child, int xpos, int ypos);
528
+ //---------------------------------------------------------------------------------------
529
+ // 影付け
530
+ // backcolor: NULLの時は白
531
+ // shadowcolor: NULLの時は黒
532
+ //---------------------------------------------------------------------------------------
533
+ PKLExport int pkl_shadowframe(PKLImage pkl, int margin, PKLColor backcolor, PKLColor shadowcolor);
534
+
535
+ //---------------------------------------------------------------------------------------
536
+ // 任意の位置に影付きで画像を配置する
537
+ // shadowcolor: NULLの時は黒
538
+ //---------------------------------------------------------------------------------------
539
+ PKLExport int pkl_randomshadow(PKLImage canvas, PKLImage pasteimage,
540
+ int top, int left, int margin, PKLColor shadowcolor);
541
+
542
+
543
+ /*************************************************************/
544
+ /** effect(一般的なエフェクト) **/
545
+ /*************************************************************/
546
+ // 反転
547
+ PKLExport int pkl_invert(PKLImage pkl);
484
548
 
485
- //影付け
486
- PKLExport int pkl_shadowframe(PKLImage pkl, int margin, int backcolor, int shadowcolor);
549
+ // 拡散
550
+ PKLExport int pkl_noise(PKLImage pkl, int noise);
487
551
 
488
- //輪郭抽出
489
- //threshold: 輪郭強調度(値が小さいほど、輪郭判定は荒くなる-->全体が黒くなる)
490
- PKLExport int pkl_edge(PKLImage pkl, int threshold);
552
+ //---------------------------------------------------------------------------------------
553
+ // (安易な)セピア
554
+ // red_weight,green_weight,blue_weight:
555
+ // red,green,blueそれぞれに対しての重み
556
+ // 値が大きいほど、その色が強く出る
557
+ // * RGBのみに対応
558
+ // * セピアっぽくするのであれば、redの重みを1.0として、他の重みを1.0より小さくする
559
+ //---------------------------------------------------------------------------------------
560
+ PKLExport int pkl_sepia(PKLImage pkl, double red_weight, double green_weight, double blue_weight);
561
+
562
+ //---------------------------------------------------------------------------------------
563
+ // (安易な)油絵化
564
+ // 油絵のようにする
565
+ // weight: 筆の太さ(というか最頻色走査領域のサイズ)
566
+ // 例えば、3を指定した場合、近傍3x3の領域の最頻色が選択される
567
+ // * weightを大きくしすぎると、処理が重くなる。注意せよ
568
+ //---------------------------------------------------------------------------------------
569
+ PKLExport int pkl_oilpaint(PKLImage pkl, int weight);
570
+
571
+ //---------------------------------------------------------------------------------------
572
+ // kuwahara(from MemoNyanDum)
573
+ // kuwaharaオペレータを使った抽象化で油絵のようになる。
574
+ // pkl_oilpaint()との違いは、エッジがより鮮明であるという点。
575
+ // range: 調整領域(>=2)
576
+ // * rangeを大きくしすぎると、処理が重くなる。注意せよ
577
+ //---------------------------------------------------------------------------------------
578
+ PKLExport int pkl_kuwahara(PKLImage pkl, int range);
491
579
 
580
+ //---------------------------------------------------------------------------------------
581
+ // VTR調
582
+ // colspace; 行の間隔
583
+ // gst: 横方向のブレ
584
+ // cst: 行の色差分
585
+ //---------------------------------------------------------------------------------------
586
+ PKLExport int pkl_vtr(PKLImage pkl, int colspace, int gst, int cst);
587
+
588
+ //---------------------------------------------------------------------------------------
589
+ // dither
590
+ //---------------------------------------------------------------------------------------
492
591
  typedef enum {
493
592
  PKL_DITHER_NON, //pkl_dithercolorではdefaultとなる
494
593
  PKL_DITHER_FLOYDSTEINBERG, //default
@@ -498,107 +597,142 @@ typedef enum {
498
597
  } PKL_DITHER;
499
598
  PKLExport int pkl_dither(PKLImage pkl, PKL_DITHER dither);
500
599
 
501
- //=============================================================================
502
- // pattern(パターン)
503
- //=============================================================================
504
- typedef enum {
505
- PKL_PAINT_LINE, //ライン(パターン内の横方向の平均で塗る)(default)
506
- PKL_PAINT_AVE, //モザイク(パターン内の平均色で塗る)
507
- } PKL_PAINT_TYPE;
508
-
509
- /* 六角形 */
510
- // pw,ph: パターンのサイズ
511
- // phのサイズをpwの3倍に設定すると、縦横サイズが同じパターンになる
512
- // type: 塗り方式
513
- PKLExport int pkl_pattern_hexagon(PKLImage pkl, int pw, int ph, PKL_PAINT_TYPE type);
514
-
515
- /* ひし形 */
516
- // pw,ph: パターンのサイズ
517
- // phのサイズをpwの2倍に設定すると、縦横サイズが同じパターンになる
518
- // type: 塗り方式
519
- // ex1) pw=10,ph=10にすると横長のパターン
520
- // ex2) pw=10,ph=20にすると縦横同じ大きさのパターン
521
- // ex3) pw=10,ph=30にすると縦長のパターン
522
- PKLExport int pkl_pattern_diamond(PKLImage pkl, int pw, int ph, PKL_PAINT_TYPE type);
523
-
524
- /* 円 */
525
- // pw,ph: パターンのサイズ
526
- // phのサイズをpwの3倍に設定すると、縦横サイズが同じパターンになる
527
- // type: 塗り方式
528
- PKLExport int pkl_pattern_circle(PKLImage pkl, int pw, int ph, PKL_PAINT_TYPE type);
529
-
530
- /* レンガ */
531
- // pw,ph: パターンのサイズ
532
- // phのサイズをpwの4倍に設定すると、縦横サイズが同じパターンになる
533
- // type: 塗り方式
534
- PKLExport int pkl_pattern_brick(PKLImage pkl, int pw, int ph, PKL_PAINT_TYPE type);
535
-
536
-
537
- /* ボロノイ分割(タイプ1) */
538
- // zone: ボロノイサイズ(>=2, <w,h)
539
- // bordercolor: -1の時は境界線を引かない。境界線色はpkl_colorで作る
540
- // test: 真の時、分割シュミレーション図を出力する
541
- PKLExport int pkl_voronoi_type1(PKLImage pkl, int zone, int bordercolor, int test);
542
-
543
-
544
- /* ボロノイ分割(タイプ2) */
545
- // count: 母点数(>=10)
546
- // bordercolor: -1の時は境界線を引かない。境界線色はpkl_colorで作る
547
- // test: 真の時、分割シュミレーション図を出力する
548
- //
549
- // *type1との違いは、母点がよりランダムに配置されるという点
550
- PKLExport int pkl_voronoi_type2(PKLImage pkl, int count, int bordercolor, int test);
551
-
600
+ //---------------------------------------------------------------------------------------
601
+ // 輪郭抽出
602
+ // edge: エッジの太さ
603
+ //---------------------------------------------------------------------------------------
604
+ PKLExport int pkl_edgepaint(PKLImage pkl, int edge);
552
605
 
553
- //=============================================================================
554
- // decrease(減色)
555
- //=============================================================================
556
- /* メディアンカット */
557
- // ncolors: 色数(1..256)
558
- // dither: 真の時dither処理する
559
- // *RGBのみ
560
- // *設定した色数で保存するには、PNGかBMPにする必要がある(JPEGは非可逆のため)
561
- PKLExport int pkl_mediancut(PKLImage pkl, int ncolors, int dither);
562
-
563
- /* Neural-Net Quantization */
564
- // ncolors: 色数(1..256)
565
- // sample: sampling factor(1..30) 1=slowest/best, 30=fastest
566
- // *設定した色数で保存するには、PNGかBMPにする必要がある(JPEGは非可逆のため)
567
- // *メディアンカットより質のいい減色ができるが遅い。
568
- PKLExport int pkl_neuquant(PKLImage pkl, int ncolors, int sample);
569
-
570
- /* Xiaolin Wu */
571
- // ncolors::色数(1..256)
572
- // *設定した色数で保存するには、PNGかBMPにする必要がある(JPEGは非可逆のため)
573
- PKLExport int pkl_wu(PKLImage pkl, int ncolors);
574
-
575
-
576
- /* ポスタライズ(階調変更) */
577
- // level:階調数(1-256) *256を何分割するかということ
578
- PKLExport int pkl_posterize(PKLImage pkl, int level);
606
+ //---------------------------------------------------------------------------------------
607
+ // 輪郭抽出
608
+ // threshold: 輪郭強調度(値が小さいほど、輪郭判定は荒くなる-->全体が黒くなる)
609
+ //---------------------------------------------------------------------------------------
610
+ PKLExport int pkl_edge(PKLImage pkl, int threshold);
579
611
 
612
+ //---------------------------------------------------------------------------------------
613
+ // 輪郭抽出
614
+ // 輪郭を抽出して滑らかに描画する
615
+ //---------------------------------------------------------------------------------------
616
+ PKLExport int pkl_contour(PKLImage pkl);
580
617
 
581
- /* 色数削減 */
582
- // 単純にlevelで指定した下位ビットを削除する。
583
- // level: 無効にする下位ビット数(0-255)
584
- PKLExport int pkl_cutcolor(PKLImage pkl, int level);
618
+ //---------------------------------------------------------------------------------------
619
+ // エッジ(輪郭)を強調する
620
+ // unsharpは画像全体をシャープにするが、これはエッジ部分のみの強調
621
+ //---------------------------------------------------------------------------------------
622
+ typedef enum {
623
+ PKL_FOCUS_DETAIL, //弱い
624
+ PKL_FOCUS_FOCUS, //中間
625
+ PKL_FOCUS_EDGES //強い
626
+ } PKL_FOCUS;
627
+ PKLExport int pkl_focus(PKLImage pkl, PKL_FOCUS type);
585
628
 
629
+ //---------------------------------------------------------------------------------------
630
+ // エンボス
631
+ //---------------------------------------------------------------------------------------
632
+ typedef enum {
633
+ PKL_EMBOSS_EMBOSS, //エンボス1
634
+ PKL_EMBOSS_HEAVY, //エンボス2
635
+ PKL_EMBOSS_LIGHT, //エンボス3
636
+ PKL_EMBOSS_LAPLACIAN //輪郭抽出
637
+ } PKL_EMBOSS;
638
+ PKLExport int pkl_emboss(PKLImage pkl, PKL_EMBOSS type);
586
639
 
587
- //=============================================================================
588
- // scrap(スクラップ)
589
- // Junkiさんところを参考に作ったものや試行錯誤品
590
- //=============================================================================
591
- /* 渦巻き */
640
+ //---------------------------------------------------------------------------------------
641
+ // カスタムテーブルを設定できるエンボス
642
+ // mask: マスク配列
643
+ // row: maskの1行の要素数
644
+ // col: maskの行数
645
+ // factor: 輪郭部分の協調度
646
+ // offset: 輪郭以外の部分の加算色(127:グレー基調・255:白基調)
647
+ //---------------------------------------------------------------------------------------
648
+ PKLExport int pkl_emboss2(PKLImage pkl, int *mask, int row, int col, double factor, int offset);
649
+
650
+
651
+ /*************************************************************/
652
+ /** camera(カメラ撮影風) **/
653
+ /*************************************************************/
654
+ //---------------------------------------------------------------------------------------
655
+ // vignette
656
+ // color: 透過色
657
+ // trans: 透過率(0-100%)
658
+ // radius: 半径
659
+ // x, y: 中心点
660
+ //---------------------------------------------------------------------------------------
661
+ PKLExport int pkl_vignette(PKLImage pkl, PKLColor color, int trans, int radius, int x, int y);
662
+
663
+ // ラウンドぼかし(中心から離れるほどぼかしが強くなる)
664
+ PKLExport int pkl_vaseline(PKLImage pkl, int radius, int x, int y);
665
+
666
+ // vignette + vaseline
667
+ PKLExport int pkl_vv(PKLImage pkl, PKLColor color, int trans, int radius, int x, int y);
668
+
669
+ // 銀塩フィルム風
670
+ PKLExport int pkl_film(PKLImage pkl, PKLColor color, int trans);
671
+
672
+ // スポットライト風
673
+ //PKLExport int pkl_spotlight(PKLImage pkl, int radius, PKLColor color, int trans);
674
+
675
+
676
+ /*************************************************************/
677
+ /** special(フィルターの組み合わせ) **/
678
+ /*************************************************************/
679
+ //---------------------------------------------------------------------------------------
680
+ // ポスタライズ(階調変更)→ノイズ除去→レベル補正→輪郭抽出
681
+ // level:階調数(1-256) *256を何分割するかということ
682
+ // low,high,coeff:レベル補正の値(low=1.5%, high=1.5%, coeff=1.0)
683
+ // edge: 0>= (0:エッジ線を引かない、1>:エッジ線を引く.指定値の線の太さのエッジを引く)
684
+ //---------------------------------------------------------------------------------------
685
+ PKLExport int pkl_edgeposter(PKLImage pkl, int level, double low, double high, double coeff, int edge);
686
+
687
+ //---------------------------------------------------------------------------------------
688
+ // クレヨン風
689
+ // factor:輪郭部分の強調度(5~80)
690
+ // bv1, bv2:拡散レベル(2-step)
691
+ // alpha:合成割合
692
+ //---------------------------------------------------------------------------------------
693
+ PKLExport int pkl_crayon(PKLImage pkl, double factor, int bv1, int bv2, int alpha);
694
+
695
+ //---------------------------------------------------------------------------------------
696
+ // 輪郭
697
+ //---------------------------------------------------------------------------------------
698
+ PKLExport int pkl_rinkaku(PKLImage pkl, double factor);
699
+
700
+ //---------------------------------------------------------------------------------------
701
+ // あじさい風
702
+ // zone: ボロノイサイズ(>=2, <w,h)
703
+ // low,high,coeff:レベル補正の値(low=9.0%, high=9.0%, coeff=1.0)
704
+ // mil,env:カラーエンボス値(mil=50, env=70)
705
+ //---------------------------------------------------------------------------------------
706
+ PKLExport int pkl_hydrangea(PKLImage pkl, int zone, double low, double high, double coeff, double mil, double env);
707
+
708
+ //---------------------------------------------------------------------------------------
709
+ // ふんわりエッジ
710
+ // level:階調数(1-256) *256を何分割するかということ
711
+ // low,high,coeff:レベル補正の値(low=1.5%, high=1.5%, coeff=1.0)
712
+ // threshold:輪郭強調度
713
+ // alpha:合成割合
714
+ //---------------------------------------------------------------------------------------
715
+ PKLExport int pkl_alphaedge(PKLImage pkl, int level, double low, double high, double coeff, int threshold, int alpha);
716
+
717
+
718
+ /*************************************************************/
719
+ /** scrap(イマイチなシリーズ) **/
720
+ /*************************************************************/
721
+ //---------------------------------------------------------------------------------------
722
+ // 渦巻き
592
723
  // factor: 渦巻き度合い(絶対値で1以下の範囲で指定する。0に近いほど、ゆるやかな渦巻きになる)
593
724
  // * 負数と正数の違いは回転方向
594
725
  // x,y: 渦巻きの中心点(座標が画像内に収まらない場合は、中心となる)
595
- // backcolor:背景色
596
- // * Junkiさんとことの違いは、ピクセル生成時にバイリニアしていないこと。なので、粗い画像になる
597
- PKLExport int pkl_swirl(PKLImage pkl, double factor, int x, int y, int backcolor);
726
+ // backcolor:背景色(NULLの時は白)
727
+ // * Junkiさんとことの違いは、ピクセル生成時にバイリニアしていないこと。なので、粗い画像になる
728
+ //---------------------------------------------------------------------------------------
729
+ PKLExport int pkl_swirl(PKLImage pkl, double factor, int x, int y, PKLColor backcolor);
598
730
 
599
- /* wave */
731
+ //---------------------------------------------------------------------------------------
732
+ // wave
600
733
  // factor:周期
601
734
  // frequency:振幅
735
+ //---------------------------------------------------------------------------------------
602
736
  typedef enum {
603
737
  PKL_WAVE_HORZ, //横方向のwave
604
738
  PKL_WAVE_VERT, //縦方向のwave
@@ -606,29 +740,47 @@ typedef enum {
606
740
  } PKL_WAVE;
607
741
  PKLExport int pkl_wave(PKLImage pkl, PKL_WAVE mode, double factor, double frequency);
608
742
 
609
-
610
- /* さほど美しくないドット絵 */
743
+ //---------------------------------------------------------------------------------------
744
+ // さほど美しくないドット絵
611
745
  // 円の描画を自力でやっているので、微妙な仕上がり品。
612
746
  // zone:ドット化する領域の一辺のサイズ(3..10)
613
- // color:ドットの色(pkl_colorで作る)
614
- PKLExport int pkl_dots(PKLImage pkl, int zone, int color);
615
-
616
-
617
- /* フォトフレーム分割 */
618
- // イメージを分割し、フォトフレームのようにする
619
- // backcolor: 背景色
620
- // wbs,hbs: オリジナルイメージの縦横分割数(>0)
621
- // margin: キャンバスのマージン(上下左右の空間)(>0)
622
- // frame: フレームの太さ(>=1)
623
- PKLExport int pkl_splitframe(PKLImage pkl, int backcolor, int wbs, int hbs, int margin, int frame);
624
-
625
- /* カラーディザー */
626
- //weight: 誤差点に確定しなかった色に対する加算色
627
- // +255以上の時は完全な白
628
- // -255以下の時は完全な黒
747
+ // color:ドットの色(NULLの時は黒)
748
+ //---------------------------------------------------------------------------------------
749
+ PKLExport int pkl_dots(PKLImage pkl, int zone, PKLColor color);
750
+
751
+ //---------------------------------------------------------------------------------------
752
+ // カラーディザー
753
+ // weight: 誤差点に確定しなかった色に対する加算色
754
+ // +255以上の時は完全な白
755
+ // -255以下の時は完全な黒
756
+ //---------------------------------------------------------------------------------------
629
757
  PKLExport int pkl_colordither(PKLImage pkl, int weight);
630
758
 
631
- PKLExport int pkl_ttt(PKLImage pkl);
759
+ //---------------------------------------------------------------------------------------
760
+ // fantasy風(from Jimmy Educational NPR system)
761
+ // 明度のみにsobelフィルタによる輪郭強調を施す
762
+ // edgeweight: 輪郭強調度(0..5, 0:輪郭強調しない、5:輪郭最大強調)
763
+ // mix: オリジナル画像の明度との合成割合(0..1, 1で100%オリジナルの明度を生かす=>輪郭強調されない)
764
+ // saturation: 彩度調整(0..5, 0:最低(色がなくなる),1:彩度に調整をかけない,1>:彩度があがる)
765
+ // hue: 色相(0..360)
766
+ // * 輪郭抽出を明度に適用するため、黒(all=0)の場合には白とびします。
767
+ //---------------------------------------------------------------------------------------
768
+ PKLExport int pkl_sobelpaint(PKLImage pkl, int edgeweight, float mix, float saturation, float hue);
769
+
770
+ //---------------------------------------------------------------------------------------
771
+ // イラスト調
772
+ // gap: エッジ判定の際の重み付け
773
+ // edge: エッジの重み(0が最もエッジが強い。0..20程度が目安)
774
+ // gammaint: 絵柄のガンマ評価値(0:暗く評価、100:明るく評価。0..100)
775
+ //---------------------------------------------------------------------------------------
776
+ PKLExport int pkl_illust(PKLImage pkl, int gap, int edge, int gammaint);
777
+
778
+ //---------------------------------------------------------------------------------------
779
+ // カラーエンボス
780
+ // mil: ハイライト(1..400)
781
+ // env: 環境光(1..100)
782
+ //---------------------------------------------------------------------------------------
783
+ PKLExport int pkl_color_emboss(PKLImage pkl, double mil, double env);
632
784
 
633
785
 
634
786
  #if defined __cplusplus