void TexturePackPanel::OnExportGIFClicked(wxCommandEvent& event) { wxFileName exFileName(m_textureListBox->GetString(m_textureListBox->GetSelection()), wxPATH_UNIX); exFileName.SetExt("gif"); wxString defaultFileName = exFileName.GetFullName(); wxFileDialog fileDlg(this, _("Select target gif"), wxStandardPaths::Get().GetDocumentsDir(), defaultFileName, "*.gif", wxFD_SAVE | wxFD_OVERWRITE_PROMPT); if (fileDlg.ShowModal() == wxID_OK) { wxBusyCursor busyCursor; wxImageArray images; const Texture& tex = m_texturePack->at(m_textureListBox->GetSelection()); for (auto frame = tex.begin(); frame != tex.end(); ++frame) { wxImage frameImg(GetFrameBitmap(*frame).ConvertToImage()); wxQuantize::Quantize(frameImg, frameImg, 256); images.Add(frameImg); } wxGIFHandler* gifHandler = (wxGIFHandler*) wxImage::FindHandler(wxBITMAP_TYPE_GIF); wxTempFileOutputStream oStr(fileDlg.GetPath()); gifHandler->SaveAnimation(images, &oStr, true, m_frameDelaySpinCtrl->GetValue()); oStr.Commit(); } }
void TexturePackPanel::UpdateFrameImage() { const Texture& tex = m_texturePack->at(m_textureListBox->GetSelection()); if (tex.empty() || !m_bitmap.IsOk()) { m_frameBitmap->SetBitmap(wxNullBitmap); return; } const Frame& frame = tex.at(m_frameSpinCtrl->GetValue()); m_frameBitmap->SetBitmap(GetFrameBitmap(frame, m_zoomSpinCtrl->GetValue())); m_framePanel->Refresh(); m_framePanel->Layout(); }
void CPreviewCtrl::Draw(CDC *pDC) { //Get the client area CRect rect; GetClientRect(&rect); HBITMAP hbmp = GetFrameBitmap(pDC->GetSafeHdc(), m_nFrame, m_nTotalFrames, rect.Width(), rect.Height()); CDC srcDC; srcDC.CreateCompatibleDC(pDC); HBITMAP hOldBmp = (HBITMAP)::SelectObject(srcDC.GetSafeHdc(), hbmp); pDC->BitBlt(rect.left, rect.top, rect.Width(), rect.Height(), &srcDC, 0, 0, SRCCOPY); ::SelectObject(srcDC.GetSafeHdc(), hOldBmp); srcDC.DeleteDC(); ::DeleteObject(hbmp); }
void CPreviewCtrl::SaveFrames(int nTotalFrames) { HDC hdc = ::GetDC(GetSafeHwnd()); //Get the client area CRect rect; GetClientRect(&rect); CString szFileName; int i; for(i = 0; i <= nTotalFrames; i++) { HBITMAP hbmp = GetFrameBitmap(hdc, i, nTotalFrames, rect.Width(), rect.Height()); szFileName.Format("Frame%03d.bmp", i); SaveBitmap(hdc, hbmp, rect.Width(), rect.Height(), szFileName); DeleteObject(hbmp); } ::ReleaseDC(GetSafeHwnd(), hdc); }