void ggscfg_ColorEditSheet::on_choice_chara(wxCommandEvent& event) { int cid = m_choice_chara->GetSelection(); int palidx = m_choice_color->GetSelection(); if (cid != m_cur_cid) { int ret = check_save_palette(); if (ret == 1) { // yes write_palette(); m_palette_changed = false; } else if (ret == 0) { // cancel m_choice_chara->SetSelection(m_cur_cid); return; } change_color_edit_chara(cid); read_image_data(0, palidx); update_ggxx_palette(false); } }
/* * Compresses all the frames in the animation and writes to a gif file. * Nothing else like extensions or comments is written. * * Returns 0 on success. * * Note: All bitmaps must have a color depth of 8. */ int algif_save_raw_animation (const char *filename, GIF_ANIMATION *gif) { int frame; int i, j; PACKFILE *file; file = pack_fopen (filename, "w"); if (!file) return -1; pack_fwrite ("GIF89a", 6, file); pack_iputw (gif->width, file); pack_iputw (gif->height, file); /* 7 global palette * 456 color richness * 3 sorted * 012 palette bits */ for (i = 1, j = 0; i < gif->palette.colors_count; i *= 2, j++); pack_putc ((j ? 128 : 0) + 64 + 32 + 16 + (j ? j - 1 : 0), file); pack_putc (gif->background_index, file); pack_putc (0, file); /* No aspect ratio. */ if (j) write_palette (file, &gif->palette, j); if (gif->loop != -1) /* Loop count extension. */ { pack_putc (0x21, file); /* Extension Introducer. */ pack_putc (0xff, file); /* Application Extension. */ pack_putc (11, file); /* Size. */ pack_fwrite ("NETSCAPE2.0", 11, file); pack_putc (3, file); /* Size. */ pack_putc (1, file); pack_iputw (gif->loop, file); pack_putc (0, file); } for (frame = 0; frame < gif->frames_count; frame++) { int w = gif->frames[frame].bitmap_8_bit->w; int h = gif->frames[frame].bitmap_8_bit->h; pack_putc (0x21, file); /* Extension Introducer. */ pack_putc (0xf9, file); /* Graphic Control Extension. */ pack_putc (4, file); /* Size. */ /* Disposal method, and enable transparency. */ i = gif->frames[frame].disposal_method << 2; if (gif->frames[frame].transparent_index != -1) i |= 1; pack_putc (i, file); pack_iputw (gif->frames[frame].duration, file); /* In 1/100th seconds. */ if (gif->frames[frame].transparent_index != -1) pack_putc (gif->frames[frame].transparent_index, file); /* Transparent color index. */ else pack_putc (0, file); pack_putc (0x00, file); /* Terminator. */ pack_putc (0x2c, file); /* Image Descriptor. */ pack_iputw (gif->frames[frame].xoff, file); pack_iputw (gif->frames[frame].yoff, file); pack_iputw (w, file); pack_iputw (h, file); /* 7: local palette * 6: interlaced * 5: sorted * 012: palette bits */ for (i = 1, j = 0; i < gif->frames[frame].palette.colors_count; i *= 2, j++); pack_putc ((j ? 128 : 0) + (j ? j - 1 : 0), file); if (j) write_palette (file, &gif->frames[frame].palette, j); LZW_encode (file, gif->frames[frame].bitmap_8_bit); pack_putc (0x00, file); /* Terminator. */ } pack_putc (0x3b, file); /* Trailer. */ pack_fclose (file); return 0; }
void ggscfg_ColorEditSheet::on_button_clicked_save_palette(wxCommandEvent& event) { write_palette(); }