DevIL Interface.c 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #include <IL/IL.h>
  2. #include <IL/ILU.h>
  3. #include <IL/ILUT.h>
  4. #include <mathlink.h>
  5. int main(int argc, char *argv[])
  6. {
  7. int retval;
  8. int image;
  9. ilInit();
  10. iluInit();
  11. ilutInit();
  12. ilGenImages(1, &image);
  13. ilBindImage(image);
  14. ilOriginFunc(IL_ORIGIN_LOWER_LEFT);
  15. retval = MLMain(argc, argv);
  16. ilDeleteImages(1, &image);
  17. ilShutDown(); // Only need to shut down DevIL, not ILU or ILUT
  18. return retval;
  19. }
  20. /*int f(int x, int y)
  21. {
  22. return x+y;
  23. }
  24. void bits(int i)
  25. {
  26. int a[32], k;
  27. for(k=0; k<32; k++) {
  28. a[k] = i%2;
  29. i >>= 1;
  30. if (i==0) break;
  31. }
  32. if (k<32) k++;
  33. MLPutInteger32List(stdlink, a, k);
  34. return;
  35. }*/
  36. int mlLoad(char *Filename)
  37. {
  38. int ret = ilLoadImage(Filename);
  39. if (ilGetInteger(IL_ORIGIN_MODE) != IL_ORIGIN_UPPER_LEFT)
  40. iluFlipImage();
  41. ilConvertImage(IL_RGBA, IL_DOUBLE);
  42. return ret;
  43. }
  44. int mlWidth(void)
  45. {
  46. return ilGetInteger(IL_IMAGE_WIDTH);
  47. }
  48. int mlHeight(void)
  49. {
  50. return ilGetInteger(IL_IMAGE_HEIGHT);
  51. }
  52. void mlData(void)
  53. {
  54. /*int x, y, c;
  55. int *Data;
  56. ILubyte *OrigData = ilGetData();
  57. Data = malloc(ilGetInteger(IL_IMAGE_WIDTH) * ilGetInteger(IL_IMAGE_HEIGHT) * 4 * sizeof(int));
  58. for (y = 0; y < ilGetInteger(IL_IMAGE_HEIGHT); y++) {
  59. for (x = 0; x < ilGetInteger(IL_IMAGE_WIDTH); x++) {
  60. for (c = 0; c < 4; c++) {
  61. Data[y * ilGetInteger(IL_IMAGE_WIDTH) * 4 + x * 4 + c] = OrigData[y * ilGetInteger(IL_IMAGE_WIDTH) * 4 + x * 4 + c];
  62. }
  63. }
  64. }
  65. MLPutInteger32List(stdlink, Data, ilGetInteger(IL_IMAGE_WIDTH) * ilGetInteger(IL_IMAGE_HEIGHT) * 4);
  66. free(Data);*/
  67. MLPutReal64List(stdlink, (ILdouble*)ilGetData(), ilGetInteger(IL_IMAGE_WIDTH) * ilGetInteger(IL_IMAGE_HEIGHT) * 4);
  68. return;
  69. }