Exemple #1
0
static int bt1_cb(Ihandle* self)
{
  imImage* image;
  int w, h;
  void* gldata;
  int ii = tabs_get_index();
  IupGetIntInt(plot[ii], "DRAWSIZE", &w, &h);
  gldata = malloc(w*h*3);
  image = imImageCreate(w, h, IM_RGB, IM_BYTE);
  IupMglPlotPaintTo(plot[ii], "RGB", w, h, 0, gldata);
  imConvertPacking(gldata, image->data[0], w, h, 3, 3, IM_BYTE, 1);
  imProcessFlip(image, image);
  imFileImageSave("../mglplot.png", "PNG", image);
  free(gldata);
  imImageDestroy(image);
  (void)self;
  return IUP_DEFAULT;
}
Exemple #2
0
imImage* imImageCreateFromOpenGLData(int width, int height, int glformat, const void* gldata)
{
  int color_space, has_alpha, depth;
  imImage* image;

  switch(glformat)
  {
  case GL_RGBA:
    color_space = IM_RGB;
    has_alpha = 1;
    depth = 4;
    break;
  case GL_RGB:
    color_space = IM_RGB;
    has_alpha = 0;
    depth = 3;
    break;
  case GL_LUMINANCE_ALPHA:
    color_space = IM_GRAY;
    depth = 2;
    has_alpha = 1;
  case GL_LUMINANCE:
    color_space = IM_GRAY;
    depth = 1;
    has_alpha = 0;
    break;
  default:
    return NULL;
  }

  image = imImageCreate(width, height, color_space, IM_BYTE);
  if (!image)
    return NULL;

  if (has_alpha)
    imImageAddAlpha(image);

  imConvertPacking(gldata, image->data[0], image->width, image->height, depth, depth, IM_BYTE, 1);

  return image;
}
Exemple #3
0
void* imImageGetOpenGLData(const imImage* image, int *format)
{
  if (!imImageIsBitmap(image))
    return NULL;

  int transp_count;
  imbyte* transp_index = (imbyte*)imImageGetAttribute(image, "TransparencyIndex", NULL, NULL);
  imbyte* transp_map = (imbyte*)imImageGetAttribute(image, "TransparencyMap", NULL, &transp_count);
  imbyte* transp_color = (imbyte*)imImageGetAttribute(image, "TransparencyColor", NULL, NULL);

  int glformat;
  switch(image->color_space)
  {
  case IM_MAP:
    if (image->has_alpha || transp_map || transp_index)
      glformat = GL_RGBA;
    else
      glformat = GL_RGB;
    break;
  case IM_RGB:
    if (image->has_alpha || transp_color)
      glformat = GL_RGBA;
    else
      glformat = GL_RGB;
    break;
  case IM_BINARY:
  default: /* IM_GRAY */
    if (image->has_alpha || transp_map || transp_index)
      glformat = GL_LUMINANCE_ALPHA;
    else
      glformat = GL_LUMINANCE;
    break;
  }

  int gldepth;
  switch (glformat)
  {
  case GL_RGB:
    gldepth = 3;
    break;
  case GL_RGBA:
    gldepth = 4;
    break;
  case GL_LUMINANCE_ALPHA:
    gldepth = 2;
    break;
  default: /* GL_LUMINANCE */
    gldepth = 1;
    break;
  }

  int size = image->count*gldepth;
  imImageSetAttribute(image, "GLDATA", IM_BYTE, size, NULL);
  imbyte* gldata = (imbyte*)imImageGetAttribute(image, "GLDATA", NULL, NULL);

  int depth = image->depth;
  if (image->has_alpha)
    depth++;

  /* copy data, including alpha */
  if (image->color_space != IM_MAP)
  {
    imConvertPacking(image->data[0], gldata, image->width, image->height, depth, gldepth, IM_BYTE, 0);

    if (image->color_space == IM_BINARY)
      iImageMakeGray(gldata, gldepth, image->count);
  }
  else
  {
    /* copy map data */
    memcpy(gldata, image->data[0], image->size);  /* size does not include alpha */

    /* expand MAP to RGB or RGBA */
    imConvertMapToRGB(gldata, image->count, gldepth, 1, image->palette, image->palette_count);

    if (image->has_alpha)
      iImageGLCopyMapAlpha((imbyte*)image->data[1], gldata, gldepth, image->count);  /* copy the alpha plane */
  }

  /* set alpha based on attributes */
  if (!image->has_alpha)
  {
    if (image->color_space == IM_RGB)
    {
      if (transp_color)
        iImageGLSetTranspColor(gldata, image->count, *(transp_color+0), *(transp_color+1), *(transp_color+2));
    }
    else 
    {
      if (transp_map)
        iImageGLSetTranspMap((imbyte*)image->data[0], gldata, image->count, transp_map, transp_count);
      else if (transp_index)
        iImageGLSetTranspIndex((imbyte*)image->data[0], gldata, gldepth, image->count, *transp_index);
    }
  }

  if (format) *format = glformat;
  return gldata;
}