stbimage 0.5.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bbcc8434378681a4cb30e911d9d1af4e4f121c300e1a291db7b33eeb5505a4f3
4
- data.tar.gz: b96b64b299432b39f088a2dbbfd064e77858b1fb57b7b220f89cc5f2f503e39f
3
+ metadata.gz: 69de01a0ee15b7dc3ce3827d250b061b62d56a3348d49b4cf01f53773439c9ab
4
+ data.tar.gz: bd2e49f16a3aad172a99645012af9cab9e8cde0a6cb0eef7bb8250ddd888183d
5
5
  SHA512:
6
- metadata.gz: 01faa35b8bd2b50520ff54924f1d22442a0ec3f3de319597ef4e9a8cda3b549a8160bad6b04af87ea2e16c90394fdfd51e8589b0ab2a12eec84867715cd900dd
7
- data.tar.gz: 0ea9d9f48aff7874d1986ef2075b0ce6084f29d27e7fc2bc391e2e8ae706a0e9f8b58d3d99c10b820e44347a821e6a4b625d76a122ba62942fc8325b11833064
6
+ metadata.gz: fbac49f49b65b30ff3340a8d3d8e2dbb7fb551dae3286255e8fac24282766e8fbc2d3fc9dd43c5082ef9020a0f8aded035064f884cee4e2e7618d115ab85af6c
7
+ data.tar.gz: 8c31f5a515a4ea94524dfcdbcee97821792655ee8c227f97dab2663ac89527d3fe8820f899aaeaafdf67253c417dee306686914527cc09256fa0220b12fcab7f
data/README.md CHANGED
@@ -1,35 +1,18 @@
1
- # STBIMAGE
2
-
3
-
1
+ # stb-image ruby bindings
4
2
 
5
3
  Ruby binding of stb-image.h
6
4
 
7
- **Works well on windows!!!**
8
- **Added support for Linux (32, 64, arm)**
9
-
10
- * ### Supports (so far): ###
5
+ * ### Supports: ###
11
6
  <br>
12
7
 
13
8
  * **stbi_load** (Default image loader)
9
+ * **stbi_load_from_memory**
14
10
  * **stbi_load_16**
15
11
  * **stbi_loadf** (For `.hdr` images)
16
12
  * **stbi_info**
17
13
  * **stbi_image_free**
18
- * **stbi_failure_reason**
19
14
  * **stbi_set_flip_vertically_on_load**
20
- * **stbi_set_flip_vertically_on_load_thread**
21
- * **stbi_set_unpremultiply_on_load**
22
- * **stbi_convert_iphone_png_to_rgb**
23
- * **stbi_hdr_to_ldr_gamma**
24
- * **stbi_hdr_to_ldr_scale**
25
- * **stbi_is_16_bit**
26
- * **stbi_is_hdr**
27
- * **stbi_zlib_decode_buffer**
28
- * **stbi_zlib_decode_malloc**
29
- * **stbi_zlib_decode_malloc_guesssize**
30
- * **stbi_zlib_decode_malloc_guesssize_headerflag**
31
- * **stbi_zlib_decode_noheader_buffer**
32
- * **stbi_zlib_decode_noheader_malloc**
15
+ * and more...
33
16
 
34
17
 
35
18
  <br>
@@ -42,13 +25,30 @@ Ruby binding of stb-image.h
42
25
  * Linux/macOs:\
43
26
  `gem install stbimage`
44
27
 
45
- *Note: In macOs you have to compile the dynamic libary (.so) yourself. Although I planned to include it in the future*
28
+ *Note: In Windows and in Linux the gem should work immadiately 'cause we using precompiled libs (see [Usage](#Usage)). In macOs you have to compile the dynamic libary (.so) yourself (see [Compilation](#Compilation)).*
29
+
30
+ <br>
31
+
32
+ # Compilation
33
+
34
+ If you want to compile the shared libary yourself, Use the instruction below (otherwise if the gem works for you than this step is unnecessary):
35
+
36
+ 1. Download sources: [stb-source](stb-source) (stb_image.h, stb_image.c)
37
+
38
+ 2. Navigate to the files in terminal with `cd`
39
+
40
+ 3. Run the command in terminal (works with macOs, linux, and linux arm):
41
+ `gcc -shared -o libstb.so -fPIC stb_image.c`
42
+
43
+ 4. If nothing shows up than finally you got your own `libstb.so` file what is fully compatible with your system.
44
+
45
+ 5. See [Usage](#Usage) to properly load it to your program.
46
46
 
47
47
  <br>
48
48
 
49
- # .dll libs
49
+ # Precompiled shared libs (.dll, .so)
50
50
 
51
- You can find it under [dlls](dlls) folder
51
+ You can find it under [dlls](lib/dlls) folder, but they are also included in the gem
52
52
 
53
53
  <br>
54
54
 
@@ -57,11 +57,21 @@ You can find it under [dlls](dlls) folder
57
57
  ```ruby
58
58
  require 'stbimage'
59
59
 
60
- # use this to load the dll (from gem version 0.2.3 and above)! Only For windows and linux yet
60
+ # When you using the precompiled shared libs. Only works with linux, arm, Windows (in macOs it doesn't work)
61
61
  STBIMAGE.load_lib()
62
62
 
63
- # In macOs you have to provide a dynamic libary (.so) by yourself
64
- # STBIMAGE.load_lib('your_name.so', 'absolute_path_to_file')
63
+ # Although when the above function doesn't work for you for some reason (or you are using macOs), please specify arguments in .load_lib function
64
+
65
+ # 1. When your own .dll, or .so libary is at the same folder as your program. Or you wanna specify relative_path to file
66
+
67
+ # STBIMAGE.load_lib('your_name.so')
68
+ # or
69
+ # STBIMAGE.load_lib('your_folder/your_name.so')
70
+
71
+ # 2. When your own .dll or .so file is somewhere in your storage, please specify absolute path
72
+
73
+ # Example:
74
+ # STBIMAGE.load_lib('your_name.so', '/home/user/documents/ruby_proj/dll')
65
75
 
66
76
 
67
77
  width = ' ' * 4
@@ -70,13 +80,92 @@ nr_channels = ' ' * 4
70
80
 
71
81
  data = STBIMAGE.stbi_load("blue-poly.jpg", width, height, nr_channels, 0)
72
82
 
73
- puts data # You can use this data in OpenGL for instance.
83
+ data # the retrieved image data
84
+
85
+ width = width.unpack1('L')
86
+ height height.unpack1('L')
87
+ nr_channels = nr_channels.unpack1('L')
88
+
89
+
90
+
91
+ # The retrieved data can be used in OpenGL for instance.
92
+ # glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data)
93
+
94
+ stbi_image_free(data)
95
+ ```
96
+
97
+ <br>
98
+
99
+ # Function list and examples:
100
+
101
+ ```ruby
102
+ include STBIMAGE
103
+
104
+ # 1. stbi_load(path_to_file, width_ptr, height_ptr, num_channels_ptr, desired_channels)
105
+
106
+ width = ' ' * 4 # width_ptr
107
+ height = ' ' * 4 # height_ptr
108
+ nr_channels = ' ' * 4 # num_channels_ptr
109
+
110
+ data = stbi_load("blue-poly.jpg", width, height, nr_channels, 0)
111
+
112
+ # retrieve the values from the pointers
113
+ width = width.unpack1('L')
114
+ height = height.unpack1('L')
115
+ nr_channels = nr_channels.unpack1('L')
116
+ ```
117
+
118
+ ```ruby
119
+ include STBIMAGE
120
+
121
+ # 2. stbi_load_from_memory(ptr_to_image_data_array, image_array_size_in_bytes, width_ptr, height_ptr, num_channels_ptr, desired_channels)
122
+
123
+ white_texture_raw = [
124
+ 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, 0x00, 0x0D, 0x49, 0x48, 0x44, 0x52,
125
+ 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x08, 0x06, 0x00, 0x00, 0x00, 0x73, 0x7A, 0x7A,
126
+ 0xF4, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xAE, 0xCE, 0x1C, 0xE9, 0x00, 0x00,
127
+ 0x00, 0x2F, 0x49, 0x44, 0x41, 0x54, 0x58, 0x47, 0xED, 0xD0, 0x41, 0x11, 0x00, 0x00, 0x0C, 0xC2,
128
+ 0xB0, 0xE1, 0x5F, 0x34, 0x93, 0xC1, 0x27, 0x55, 0xD0, 0x4B, 0xDA, 0xF6, 0x86, 0xC5, 0x00, 0x01,
129
+ 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0xB0, 0x16,
130
+ 0x78, 0x31, 0x4C, 0x7F, 0xA1, 0xF9, 0xB6, 0x23, 0xF9, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4E,
131
+ 0x44, 0xAE, 0x42, 0x60, 0x82
132
+ ]
133
+
134
+ texture_size = white_texture_raw.size
135
+ texture_ptr = Fiddle::Pointer.to_ptr(white_texture_raw.pack('C*'))
136
+
137
+ width = ' ' * 4 # width_ptr
138
+ height = ' ' * 4 # height_ptr
139
+ nr_channels = ' ' * 4 # num_channels_ptr
140
+
141
+ data = stbi_load_from_file(texture_ptr, texture_size, width, height, nr_channels, 0)
142
+
143
+ # retrieve the values from the pointers
144
+ width = width.unpack1('L')
145
+ height = height.unpack1('L')
146
+ nr_channels = nr_channels.unpack1('L')
147
+ ```
148
+
149
+ ```ruby
150
+ include STBIMAGE
151
+
152
+ # 3. stbi_set_flip_vertically_on_load(value)
153
+ # before getting reading the image:
74
154
 
75
- puts width.unpack('l')[0]
76
- puts height.unpack('l')[0]
77
- puts nr_channels.unpack('l')[0]
155
+ stbi_set_flip_vertically_on_load(1) # flips the image vertically on load
156
+ stbi_set_flip_vertically_on_load(0) # disable flipping
78
157
  ```
79
158
 
159
+ ```ruby
160
+ include STBIMAGE
161
+
162
+ # 4. stbi_image_free(img_data)
163
+ # freeing up the image in memory after we loaded the image. It's essential in order to avoid big memory usage.
164
+
165
+ stbi_image_free(data)
166
+ ```
167
+
168
+
80
169
  <br>
81
170
 
82
171
  # Credit
File without changes
File without changes
File without changes
File without changes
File without changes
data/lib/stbimage.rb CHANGED
@@ -35,15 +35,15 @@ module STBIMAGE
35
35
  def self.load_lib(lib = nil, path = nil, output_error = false)
36
36
  if lib == nil && path == nil
37
37
 
38
- if RUBY_PLATFORM =~ /x86/
38
+ if RUBY_PLATFORM =~ /64/
39
39
 
40
- # puts "You have a 32-bit Architecture ruby"
40
+ # puts "You have a 64-bit Architecture ruby"
41
41
  if RUBY_PLATFORM =~ /mswin/ || RUBY_PLATFORM =~ /mingw/
42
42
  # puts "With Windows"
43
- lib, path = 'stbDLL_x86.dll', "#{__dir__}/../dlls"
43
+ lib, path = 'stbDLL_x64.dll', "#{__dir__}/dlls"
44
44
  elsif RUBY_PLATFORM =~ /linux/ || RUBY_PLATFORM =~ /cygwin/
45
45
  # puts "With Linux"
46
- lib, path = 'libstb_x86.so', "#{__dir__}/../dlls"
46
+ lib, path = 'libstb_x64.so', "#{__dir__}/dlls"
47
47
  elsif RUBY_PLATFORM =~ /darwin/
48
48
  # puts "With macOS"
49
49
  else
@@ -53,7 +53,7 @@ module STBIMAGE
53
53
  elsif RUBY_PLATFORM =~ /arm/
54
54
 
55
55
  # puts "You have a arm architecture"
56
- lib, path = 'libstb_arm.so', "#{__dir__}/../dlls"
56
+ lib, path = 'libstb_arm.so', "#{__dir__}/dlls"
57
57
 
58
58
  elsif RUBY_PLATFORM =~ /java/
59
59
 
@@ -61,13 +61,13 @@ module STBIMAGE
61
61
 
62
62
  else
63
63
 
64
- # puts "You have a 64-bit Architecture ruby"
64
+ # puts "You have a 32-bit Architecture ruby"
65
65
  if RUBY_PLATFORM =~ /mswin/ || RUBY_PLATFORM =~ /mingw/
66
66
  # puts "With Windows"
67
- lib, path = 'stbDLL_x64.dll', "#{__dir__}/../dlls"
67
+ lib, path = 'stbDLL_x86.dll', "#{__dir__}/dlls"
68
68
  elsif RUBY_PLATFORM =~ /linux/ || RUBY_PLATFORM =~ /cygwin/
69
69
  # puts "With Linux"
70
- lib, path = 'libstb_x64.so', "#{__dir__}/../dlls"
70
+ lib, path = 'libstb_x86.so', "#{__dir__}/dlls"
71
71
  elsif RUBY_PLATFORM =~ /darwin/
72
72
  # puts "With macOS"
73
73
  else
@@ -81,7 +81,7 @@ module STBIMAGE
81
81
  if path
82
82
  dlload (path + '/' + lib)
83
83
  else
84
- dlload (lib)
84
+ dlload ("#{__dir__}/#{lib}")
85
85
  end
86
86
  import_symbols(output_error) unless @@stbi_image_import_done
87
87
  end
@@ -113,7 +113,7 @@ module STBIMAGE
113
113
  # 'stbi_load_from_callbacks'
114
114
  # 'stbi_load_from_file'
115
115
  # 'stbi_load_from_file_16'
116
- # 'stbi_load_from_memory'
116
+ 'stbi_uc const* stbi_load_from_memory(stbi_uc const*, int, int*, int*, int*, int)',
117
117
  # 'stbi_load_gif_from_memory'
118
118
  'float* stbi_loadf(char const*, int*, int*, int*, int)',
119
119
  # 'stbi_loadf_from_callbacks'