ImageDecoder.cpp 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. /*
  2. * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <LibGfx/BMPLoader.h>
  7. #include <LibGfx/DDSLoader.h>
  8. #include <LibGfx/GIFLoader.h>
  9. #include <LibGfx/ICOLoader.h>
  10. #include <LibGfx/ImageDecoder.h>
  11. #include <LibGfx/JPGLoader.h>
  12. #include <LibGfx/PBMLoader.h>
  13. #include <LibGfx/PGMLoader.h>
  14. #include <LibGfx/PNGLoader.h>
  15. #include <LibGfx/PPMLoader.h>
  16. namespace Gfx {
  17. ImageDecoder::ImageDecoder(const u8* data, size_t size)
  18. {
  19. m_plugin = make<PNGImageDecoderPlugin>(data, size);
  20. if (m_plugin->sniff())
  21. return;
  22. m_plugin = make<GIFImageDecoderPlugin>(data, size);
  23. if (m_plugin->sniff())
  24. return;
  25. m_plugin = make<BMPImageDecoderPlugin>(data, size);
  26. if (m_plugin->sniff())
  27. return;
  28. m_plugin = make<PBMImageDecoderPlugin>(data, size);
  29. if (m_plugin->sniff())
  30. return;
  31. m_plugin = make<PGMImageDecoderPlugin>(data, size);
  32. if (m_plugin->sniff())
  33. return;
  34. m_plugin = make<PPMImageDecoderPlugin>(data, size);
  35. if (m_plugin->sniff())
  36. return;
  37. m_plugin = make<ICOImageDecoderPlugin>(data, size);
  38. if (m_plugin->sniff())
  39. return;
  40. m_plugin = make<JPGImageDecoderPlugin>(data, size);
  41. if (m_plugin->sniff())
  42. return;
  43. m_plugin = make<DDSImageDecoderPlugin>(data, size);
  44. if (m_plugin->sniff())
  45. return;
  46. m_plugin = nullptr;
  47. }
  48. ImageDecoder::~ImageDecoder()
  49. {
  50. }
  51. RefPtr<Gfx::Bitmap> ImageDecoder::bitmap() const
  52. {
  53. if (!m_plugin)
  54. return nullptr;
  55. return m_plugin->bitmap();
  56. }
  57. }