/src/os/qt/ftk_image_qt_decoder.cpp

http://ftk.googlecode.com/ · C++ · 86 lines · 70 code · 15 blank · 1 comment · 20 complexity · f57860192a9966df08d32bfa72ce5a04 MD5 · raw file

  1. extern "C" {
  2. #include "ftk_typedef.h"
  3. }
  4. #include "ftk_log.h"
  5. #include "ftk_image_qt_decoder.h"
  6. #include <QtGui/QImage>
  7. static Ret ftk_image_qt_decoder_match(FtkImageDecoder* thiz, const char* filename)
  8. {
  9. return_val_if_fail(thiz != NULL && filename != NULL, RET_FAIL);
  10. return (strstr(filename, "bmp") != NULL
  11. || strstr(filename, ".png") != NULL
  12. || strstr(filename, ".jpg") != NULL
  13. || strstr(filename, ".jpeg") != NULL) ? RET_OK : RET_FAIL;
  14. }
  15. static FtkBitmap* ftk_image_qt_decoder_decode(FtkImageDecoder* thiz, const char* filename)
  16. {
  17. int x = 0;
  18. int y = 0;
  19. int w = 0;
  20. int h = 0;
  21. FtkColor bg = {0};
  22. FtkBitmap* bitmap = NULL;
  23. FtkColor* src = NULL;
  24. FtkColor* dst = NULL;
  25. QImage* img = NULL;
  26. return_val_if_fail(thiz != NULL && filename != NULL, NULL);
  27. img = new QImage();
  28. if(!img->load(QString::fromUtf8(filename)))
  29. {
  30. delete img;
  31. return NULL;
  32. }
  33. w = img->width();
  34. h = img->height();
  35. bg.a = 0xff;
  36. bitmap = ftk_bitmap_create(w, h, bg);
  37. QImage::Format format = img->format();
  38. const unsigned char* bits = img->bits();//img->constBits();
  39. src = (FtkColor*)bits;
  40. dst = ftk_bitmap_lock(bitmap);
  41. // TODO: format
  42. for(y = 0; y < h; y++)
  43. {
  44. for(x = 0; x < w; x++)
  45. {
  46. *dst = *src;
  47. dst++;
  48. src++;
  49. }
  50. }
  51. delete img;
  52. return bitmap;
  53. }
  54. static void ftk_image_qt_decoder_destroy(FtkImageDecoder* thiz)
  55. {
  56. if(thiz != NULL)
  57. {
  58. FTK_ZFREE(thiz, sizeof(FtkImageDecoder));
  59. }
  60. }
  61. FtkImageDecoder* ftk_image_qt_decoder_create(void)
  62. {
  63. FtkImageDecoder* thiz = (FtkImageDecoder*)FTK_ZALLOC(sizeof(FtkImageDecoder));
  64. if(thiz != NULL)
  65. {
  66. thiz->match = ftk_image_qt_decoder_match;
  67. thiz->decode = ftk_image_qt_decoder_decode;
  68. thiz->destroy = ftk_image_qt_decoder_destroy;
  69. }
  70. return thiz;
  71. }