|
|
@ -265,20 +265,37 @@ Image::error(Local<Value> err) { |
|
|
|
/*
|
|
|
|
* Load cairo surface from the image src. |
|
|
|
* |
|
|
|
* TODO: better format resolution |
|
|
|
* TODO: better format detection |
|
|
|
* TODO: support more formats |
|
|
|
*/ |
|
|
|
|
|
|
|
cairo_status_t |
|
|
|
Image::loadSurface() { |
|
|
|
switch (extension(filename)) { |
|
|
|
case Image::PNG: |
|
|
|
case Image::PNG: return loadPNG(); |
|
|
|
case Image::JPEG: return loadJPEG(); |
|
|
|
} |
|
|
|
return CAIRO_STATUS_READ_ERROR; |
|
|
|
} |
|
|
|
|
|
|
|
/*
|
|
|
|
* Load PNG. |
|
|
|
*/ |
|
|
|
|
|
|
|
cairo_status_t |
|
|
|
Image::loadPNG() { |
|
|
|
_surface = cairo_image_surface_create_from_png(filename); |
|
|
|
width = cairo_image_surface_get_width(_surface); |
|
|
|
height = cairo_image_surface_get_height(_surface); |
|
|
|
return cairo_surface_status(_surface); |
|
|
|
break; |
|
|
|
case Image::JPEG: { |
|
|
|
} |
|
|
|
|
|
|
|
/*
|
|
|
|
* Load JPEG, convert RGB to ARGB. |
|
|
|
*/ |
|
|
|
|
|
|
|
cairo_status_t |
|
|
|
Image::loadJPEG() { |
|
|
|
// TODO: error handling
|
|
|
|
// TODO: move to node IO
|
|
|
|
FILE *stream = fopen(filename, "r"); |
|
|
@ -321,10 +338,6 @@ Image::loadSurface() { |
|
|
|
jpeg_destroy_decompress(&info); |
|
|
|
return cairo_surface_status(_surface); |
|
|
|
} |
|
|
|
break; |
|
|
|
} |
|
|
|
return CAIRO_STATUS_READ_ERROR; |
|
|
|
} |
|
|
|
|
|
|
|
/*
|
|
|
|
* Return UNKNOWN, JPEG, or PNG based on the filename. |
|
|
|