Exemplo n.º 1
0
int imFileWriteImageInfo(imFile* ifile, int width, int height, int user_color_mode, int user_data_type)
{
  assert(ifile);
  assert(ifile->is_new);
  imFileFormatBase* ifileformat = (imFileFormatBase*)ifile;

  if (!imImageCheckFormat(user_color_mode, user_data_type))
    return IM_ERR_DATA;

  int error = ifileformat->iformat->CanWrite(ifile->compression, user_color_mode, user_data_type);
  if (error) return error;

  ifile->width = width;
  ifile->height = height;
  ifile->user_color_mode = user_color_mode;
  ifile->user_data_type = user_data_type;

  if (imColorModeSpace(user_color_mode) == IM_BINARY)
  {
    ifile->palette_count = 2;
    ifile->palette[0] = imColorEncode(0, 0, 0);
    ifile->palette[1] = imColorEncode(255, 255, 255);
  }

  return ifileformat->WriteImageInfo();
}
Exemplo n.º 2
0
/*****************************************************************************\
 im.ImageCheckFormat(width, color_mode)
\*****************************************************************************/
static int imluaImageCheckFormat (lua_State *L)
{
  int color_mode = luaL_checkinteger(L, 1);
  int data_type = luaL_checkinteger(L, 2);

  lua_pushboolean(L, imImageCheckFormat(color_mode, data_type));
  return 1;
}
Exemplo n.º 3
0
int imFileReadImageInfo(imFile* ifile, int index, int *width, int *height, int *file_color_mode, int *file_data_type)
{
  assert(ifile);
  assert(!ifile->is_new);
  imFileFormatBase* ifileformat = (imFileFormatBase*)ifile;

  if (index >= ifile->image_count)
    return IM_ERR_DATA;

  if (ifile->image_index != -1 &&
      ifile->image_index == index)
  {
    if(width) *width = ifile->width;
    if(height) *height = ifile->height;
    if(file_color_mode) *file_color_mode = ifile->file_color_mode;
    if(file_data_type) *file_data_type = ifile->file_data_type;

    return IM_ERR_NONE;
  }

  ifile->convert_bpp = 0;
  ifile->switch_type = 0;

  int error = ifileformat->ReadImageInfo(index);
  if (error) return error;

  if (!imImageCheckFormat(ifile->file_color_mode, ifile->file_data_type))
    return IM_ERR_DATA;

  if (imColorModeSpace(ifile->file_color_mode) == IM_BINARY)
  {
    ifile->palette_count = 2;
    ifile->palette[0] = imColorEncode(0, 0, 0);
    ifile->palette[1] = imColorEncode(255, 255, 255);
  }

  if (imColorModeSpace(ifile->file_color_mode) == IM_MAP)
  {    
    if (iFileCheckPaletteGray(ifile))
      ifile->file_color_mode = (ifile->file_color_mode & 0xFF00) | IM_GRAY;

    if (iFileCheckPaletteBinary(ifile))
      ifile->file_color_mode = (ifile->file_color_mode & 0xFF00) | IM_BINARY;
  }

  if(width) *width = ifile->width;
  if(height) *height = ifile->height;
  if(file_color_mode) *file_color_mode = ifile->file_color_mode;
  if(file_data_type) *file_data_type = ifile->file_data_type;

  ifile->image_index = index; 

  return IM_ERR_NONE;
}
Exemplo n.º 4
0
/*****************************************************************************\
 im.ImageCreate(width, height, color_space, data_type)
\*****************************************************************************/
static int imluaImageCreate (lua_State *L)
{
  int width = luaL_checkint(L, 1);
  int height = luaL_checkint(L, 2);
  int color_space = luaL_checkint(L, 3);
  int data_type = luaL_checkint(L, 4);
  imImage *image;

  if (!imImageCheckFormat(color_space, data_type))
    luaL_error(L, "invalid combination of color space and data type.");

  image = imImageCreate(width, height, color_space, data_type);
  imlua_pushimage(L, image);
  return 1;
}
Exemplo n.º 5
0
int imFileReadImageData(imFile* ifile, void* data, int convert2bitmap, int color_mode_flags)
{
  assert(ifile);
  assert(!ifile->is_new);
  imFileFormatBase* ifileformat = (imFileFormatBase*)ifile;

  if (ifile->image_index == -1)
    return IM_ERR_DATA;

  ifile->user_color_mode = ifile->file_color_mode;
  ifile->user_data_type = ifile->file_data_type;

  if (convert2bitmap)
  {
    ifile->user_data_type = IM_BYTE;
    ifile->user_color_mode = imColorModeToBitmap(ifile->file_color_mode);
  }

  if (color_mode_flags != -1)
  {
    ifile->user_color_mode = imColorModeSpace(ifile->user_color_mode);
    ifile->user_color_mode |= color_mode_flags;
  }

  if (!imImageCheckFormat(ifile->user_color_mode, ifile->user_data_type))
    return IM_ERR_DATA;

  if (!imFileCheckConversion(ifile))
    return IM_ERR_DATA;

  imFileLineBufferInit(ifile);

  int ret = ifileformat->ReadImageData(data);

  // here we can NOT change the file_color_mode we already returned to the user
  // so just check for gray and binary consistency

  if (imColorModeSpace(ifile->file_color_mode) == IM_GRAY && ifile->file_data_type == IM_BYTE)
    iFileCheckConvertGray(ifile, (imbyte*)data);

  if (imColorModeSpace(ifile->file_color_mode) == IM_BINARY)
    iFileCheckConvertBinary(ifile, (imbyte*)data);

  return ret;
}