Browse Source

Added Image::loadJPEG() and Image::loadPNG()

v1.x
Tj Holowaychuk 15 years ago
parent
commit
41b08746eb
  1. 29
      src/Image.cc
  2. 2
      src/Image.h

29
src/Image.cc

@ -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.

2
src/Image.h

@ -32,6 +32,8 @@ class Image: public node::ObjectWrap {
inline uint8_t *data(){ return cairo_image_surface_get_data(_surface); }
inline int stride(){ return cairo_image_surface_get_stride(_surface); }
cairo_status_t loadSurface();
cairo_status_t loadPNG();
cairo_status_t loadJPEG();
void error(Local<Value>);
void loadSync();
void loaded();

Loading…
Cancel
Save