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
data/History.txt CHANGED
@@ -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.
data/License.txt CHANGED
File without changes
data/Manifest.txt CHANGED
@@ -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
data/config/hoe.rb CHANGED
@@ -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
data/ext/pikl/pikl.h CHANGED
@@ -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