Fix image encode
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
package lime.graphics.format;
|
package lime.graphics.format;
|
||||||
|
|
||||||
|
|
||||||
|
import haxe.io.Bytes;
|
||||||
import lime.graphics.Image;
|
import lime.graphics.Image;
|
||||||
import lime.graphics.ImageBuffer;
|
import lime.graphics.ImageBuffer;
|
||||||
import lime.system.System;
|
import lime.system.System;
|
||||||
@@ -58,7 +59,16 @@ class JPEG {
|
|||||||
|
|
||||||
#elseif (sys && (!disable_cffi || !format))
|
#elseif (sys && (!disable_cffi || !format))
|
||||||
|
|
||||||
return lime_image_encode (image.buffer, 1, quality);
|
var data = lime_image_encode (image.buffer, 1, quality);
|
||||||
|
|
||||||
|
#if neko
|
||||||
|
var bytes = @:privateAccess (new Bytes (data.length, data.b));
|
||||||
|
#else
|
||||||
|
var bytes = Bytes.ofString (data.b);
|
||||||
|
@:privateAccess (bytes).length = data.length;
|
||||||
|
#end
|
||||||
|
|
||||||
|
return ByteArray.fromBytes (bytes);
|
||||||
|
|
||||||
#end
|
#end
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package lime.graphics.format;
|
package lime.graphics.format;
|
||||||
|
|
||||||
|
|
||||||
|
import haxe.io.Bytes;
|
||||||
import lime.graphics.Image;
|
import lime.graphics.Image;
|
||||||
import lime.system.System;
|
import lime.system.System;
|
||||||
import lime.utils.ByteArray;
|
import lime.utils.ByteArray;
|
||||||
@@ -67,7 +68,16 @@ class PNG {
|
|||||||
|
|
||||||
if (!System.disableCFFI) {
|
if (!System.disableCFFI) {
|
||||||
|
|
||||||
return lime_image_encode (image.buffer, 0, 0);
|
var data = lime_image_encode (image.buffer, 0, 0);
|
||||||
|
|
||||||
|
#if neko
|
||||||
|
var bytes = @:privateAccess (new Bytes (data.length, data.b));
|
||||||
|
#else
|
||||||
|
var bytes = Bytes.ofString (data.b);
|
||||||
|
@:privateAccess (bytes).length = data.length;
|
||||||
|
#end
|
||||||
|
|
||||||
|
return byteArray;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,8 @@ namespace lime {
|
|||||||
const unsigned char *Data () const;
|
const unsigned char *Data () const;
|
||||||
int Length () const;
|
int Length () const;
|
||||||
void Resize (int size);
|
void Resize (int size);
|
||||||
|
void Set (value bytes);
|
||||||
|
void Set (const QuickVec<unsigned char> data);
|
||||||
value Value ();
|
value Value ();
|
||||||
|
|
||||||
unsigned char *_data;
|
unsigned char *_data;
|
||||||
|
|||||||
@@ -361,7 +361,7 @@ namespace lime {
|
|||||||
|
|
||||||
jpeg_finish_compress (&cinfo);
|
jpeg_finish_compress (&cinfo);
|
||||||
|
|
||||||
*bytes = Bytes (dest.mOutput);
|
bytes->Set (dest.mOutput);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
|||||||
@@ -295,7 +295,7 @@ namespace lime {
|
|||||||
|
|
||||||
png_write_end (png_ptr, NULL);
|
png_write_end (png_ptr, NULL);
|
||||||
|
|
||||||
*bytes = Bytes (out_buffer);
|
bytes->Set (out_buffer);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
|||||||
@@ -30,46 +30,7 @@ namespace lime {
|
|||||||
|
|
||||||
Bytes::Bytes (value bytes) {
|
Bytes::Bytes (value bytes) {
|
||||||
|
|
||||||
if (!init) {
|
Set (bytes);
|
||||||
|
|
||||||
id_b = val_id ("b");
|
|
||||||
id_length = val_id ("length");
|
|
||||||
init = true;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (val_is_null (bytes)) {
|
|
||||||
|
|
||||||
_length = 0;
|
|
||||||
_data = 0;
|
|
||||||
_value = 0;
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
_value = bytes;
|
|
||||||
_length = val_int (val_field (bytes, id_length));
|
|
||||||
|
|
||||||
if (_length > 0) {
|
|
||||||
|
|
||||||
value b = val_field (bytes, id_b);
|
|
||||||
|
|
||||||
if (val_is_string (b)) {
|
|
||||||
|
|
||||||
_data = (unsigned char*)val_string (b);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
_data = (unsigned char*)buffer_data (val_to_buffer (b));
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
_data = 0;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -101,20 +62,7 @@ namespace lime {
|
|||||||
|
|
||||||
Bytes::Bytes (const QuickVec<unsigned char> data) {
|
Bytes::Bytes (const QuickVec<unsigned char> data) {
|
||||||
|
|
||||||
_length = data.size ();
|
Set (data);
|
||||||
|
|
||||||
if (_length > 0) {
|
|
||||||
|
|
||||||
_data = (unsigned char*)malloc (_length);
|
|
||||||
memcpy (_data, &data[0], _length);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
_data = 0;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
_value = 0;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -208,6 +156,84 @@ namespace lime {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Bytes::Set (value bytes) {
|
||||||
|
|
||||||
|
if (!init) {
|
||||||
|
|
||||||
|
id_b = val_id ("b");
|
||||||
|
id_length = val_id ("length");
|
||||||
|
init = true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!_value && _data) {
|
||||||
|
|
||||||
|
free (_data);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (val_is_null (bytes)) {
|
||||||
|
|
||||||
|
_length = 0;
|
||||||
|
_data = 0;
|
||||||
|
_value = 0;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
_value = bytes;
|
||||||
|
_length = val_int (val_field (bytes, id_length));
|
||||||
|
|
||||||
|
if (_length > 0) {
|
||||||
|
|
||||||
|
value b = val_field (bytes, id_b);
|
||||||
|
|
||||||
|
if (val_is_string (b)) {
|
||||||
|
|
||||||
|
_data = (unsigned char*)val_string (b);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
_data = (unsigned char*)buffer_data (val_to_buffer (b));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
_data = 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Bytes::Set (const QuickVec<unsigned char> data) {
|
||||||
|
|
||||||
|
if (!_value && _data) {
|
||||||
|
|
||||||
|
free (_data);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
_length = data.size ();
|
||||||
|
|
||||||
|
if (_length > 0) {
|
||||||
|
|
||||||
|
_data = (unsigned char*)malloc (_length);
|
||||||
|
memcpy (_data, &data[0], _length);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
_data = 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
_value = 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
value Bytes::Value () {
|
value Bytes::Value () {
|
||||||
|
|
||||||
if (_value) {
|
if (_value) {
|
||||||
@@ -225,10 +251,21 @@ namespace lime {
|
|||||||
}
|
}
|
||||||
|
|
||||||
value object = alloc_empty_object ();
|
value object = alloc_empty_object ();
|
||||||
value newString = alloc_raw_string (_length);
|
|
||||||
memcpy ((char*)val_string (newString), _data, _length);
|
if (_length > 0 && _data) {
|
||||||
alloc_field (object, id_b, newString);
|
|
||||||
alloc_field (object, id_length, alloc_int (_length));
|
value newString = alloc_raw_string (_length);
|
||||||
|
memcpy ((char*)val_string (newString), _data, _length);
|
||||||
|
alloc_field (object, id_b, newString);
|
||||||
|
alloc_field (object, id_length, alloc_int (_length));
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
alloc_field (object, id_b, alloc_raw_string (0));
|
||||||
|
alloc_field (object, id_length, alloc_int (_length));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
return object;
|
return object;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user