void FormatSettingsPopup::buildPropertyCheckBox(int index, TPropertyGroup *props) { TBoolProperty *prop = (TBoolProperty *)(props->getProperty(index)); assert(prop); PropertyCheckBox *v = new PropertyCheckBox(tr(prop->getName().c_str()), this, prop); m_widgets[prop->getName()] = v; m_mainLayout->addWidget(v, m_mainLayout->rowCount(), 1); v->setChecked(prop->getValue()); }
void PngWriter::open(FILE *file, const TImageInfo &info) { m_info = info; m_png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, (png_voidp)0, //user_error_ptr, 0, //user_error_fn, 0); //user_warning_fn); if (!m_png_ptr) return; m_info_ptr = png_create_info_struct(m_png_ptr); if (!m_info_ptr) { png_destroy_write_struct(&m_png_ptr, (png_infopp)0); return; } m_chan = file; png_init_io(m_png_ptr, m_chan); if (!m_properties) m_properties = new Tiio::PngWriterProperties(); TBoolProperty *alphaProp = (TBoolProperty *)(m_properties->getProperty("Alpha Channel")); TPointerProperty *colormap = (TPointerProperty *)(m_properties->getProperty("Colormap")); m_matte = (alphaProp && alphaProp->getValue()) ? true : false; if (colormap) m_colormap = (vector<TPixel> *)colormap->getValue(); TUINT32 x_pixels_per_meter = tround(m_info.m_dpix / 0.0254); TUINT32 y_pixels_per_meter = tround(m_info.m_dpiy / 0.0254); if (!m_colormap) png_set_IHDR(m_png_ptr, m_info_ptr, m_info.m_lx, m_info.m_ly, info.m_bitsPerSample, m_matte ? PNG_COLOR_TYPE_RGB_ALPHA : PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); else { png_set_IHDR(m_png_ptr, m_info_ptr, m_info.m_lx, m_info.m_ly, 8, PNG_COLOR_TYPE_PALETTE, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); for (unsigned int i = 0; i < m_colormap->size(); i++) { /*unsigned char red = (i>>5)&0x7; unsigned char green = (i>>2)&0x7; unsigned char blue = i&0x3; palette[i].red = (red>>1) | (red<<2) | (red<<5); palette[i].green = (green>>1) | (green<<2) | (green<<5); palette[i].blue = blue | (blue<<2) | (blue<<4) | (blue<<6); if (red==0 && green==0) alpha[i] = 0; else if (blue==0 && green==0) alpha[i] = 128; else alpha[i] = 255;*/ palette[i].red = (*m_colormap)[i].r; palette[i].green = (*m_colormap)[i].g; palette[i].blue = (*m_colormap)[i].b; } png_set_PLTE(m_png_ptr, m_info_ptr, palette, m_colormap->size()); } //png_set_dither(m_png_ptr, palette, 256, 256, 0, 1); #if defined(TNZ_MACHINE_CHANNEL_ORDER_MBGR) png_set_bgr(m_png_ptr); png_set_swap_alpha(m_png_ptr); #elif defined(TNZ_MACHINE_CHANNEL_ORDER_BGRM) png_set_bgr(m_png_ptr); #elif defined(TNZ_MACHINE_CHANNEL_ORDER_MRGB) png_set_swap_alpha(m_png_ptr); #elif !defined(TNZ_MACHINE_CHANNEL_ORDER_RGBM) #error "unknownchannel order" #endif png_write_info(m_png_ptr, m_info_ptr); png_set_pHYs(m_png_ptr, m_info_ptr, x_pixels_per_meter, y_pixels_per_meter, 1); if (m_colormap && m_matte) { alpha[0] = 0; //png_set_tRNS(m_png_ptr, m_info_ptr, alpha, 1, PNG_COLOR_TYPE_PALETTE); png_color_16 bgcolor; bgcolor.index = 0; png_set_tRNS(m_png_ptr, m_info_ptr, alpha, 1, &bgcolor); } }