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();
}
Exemple #3
0
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);
}
Exemple #4
0
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);
}