ImageReader.c 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. #include "core/ImageReader.h"
  2. /*void ImageReader::Image::clean(ColorChannel*& c) {
  3. free(c);
  4. }
  5. static void cleanRawData(ColorChannel*& c) {
  6. free(c);
  7. }
  8. static void cleanState(LodePNGState& state) {
  9. lodepng_state_cleanup(&state);
  10. }
  11. ImageReader::Image::Image() : data(nullptr) {
  12. }
  13. Error ImageReader::load(Image& image, const char* path) {
  14. Cleaner<ColorChannel*, cleanRawData> rawData(nullptr);
  15. size_t rawSize;
  16. unsigned int error = lodepng_load_file(&rawData, &rawSize, path);
  17. if(error) {
  18. Error e{"cannot load file '"};
  19. e.message.append(path).append("': ").append(lodepng_error_text(error));
  20. return e;
  21. }
  22. Cleaner<LodePNGState, cleanState> state;
  23. lodepng_state_init(&state);
  24. state->decoder.color_convert = false;
  25. error = lodepng_decode(&image.data, &image.width, &image.height, &state,
  26. rawData, rawSize);
  27. if(error) {
  28. Error e{"cannot decode file '"};
  29. e.message.append(path).append("'").append(lodepng_error_text(error));
  30. return e;
  31. }
  32. image.channels = lodepng_get_channels(&state->info_png.color);
  33. image.bitdepth = state->info_png.color.bitdepth;
  34. return {};
  35. }*/