⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dg_image_renderer.cpp

📁 彩信浏览器
💻 CPP
字号:
// This file is part of Ambulant Player, www.ambulantplayer.org.//// Copyright (C) 2003-2007 Stichting CWI, // Kruislaan 413, 1098 SJ Amsterdam, The Netherlands.//// Ambulant Player is free software; you can redistribute it and/or modify// it under the terms of the GNU Lesser General Public License as published by// the Free Software Foundation; either version 2.1 of the License, or// (at your option) any later version.//// Ambulant Player is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the// GNU Lesser General Public License for more details.//// You should have received a copy of the GNU Lesser General Public License// along with Ambulant Player; if not, write to the Free Software// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA/*  * @$Id: dg_image_renderer.cpp,v 1.9 2007/02/12 14:14:51 jackjansen Exp $  */#include <objbase.h>#include <windows.h>#include "ambulant/gui/dg/dg_image_renderer.h"#include "ambulant/lib/colors.h"#include "ambulant/lib/memfile.h"#include "ambulant/lib/logger.h"#include "ambulant/lib/win32/win32_error.h"//#define AM_DBG#ifndef AM_DBG#define AM_DBG if(0)#endif#define AM_JPG#define AM_PNG#define AM_GIF#define AM_BMP#ifdef AM_JPG#include "ambulant/gui/dg/jpg_decoder.h"#endif#ifdef AM_PNG#include "ambulant/gui/dg/png_decoder.h"#endif#ifdef AM_GIF#include "ambulant/gui/dg/gif_decoder.h"#endif#ifdef AM_BMP#include "ambulant/gui/dg/bmp_decoder.h"#endif#include "ambulant/gui/dg/dg_viewport.h"using namespace ambulant;using ambulant::lib::win32::win_report_error;using ambulant::lib::win32::win_report_last_error;using ambulant::lib::logger;typedef gui::dg::img_decoder<lib::memfile> img_decoder_class;static img_decoder_class*create_img_decoder(lib::memfile *src, HDC hdc) {	img_decoder_class* decoder = 0;#ifdef AM_JPG	typedef gui::dg::jpg_decoder<lib::memfile> jpg_decoder_class;	decoder = new jpg_decoder_class(src, hdc);	if(decoder->can_decode()) return decoder;	delete decoder;#endif#ifdef AM_PNG	typedef gui::dg::png_decoder<lib::memfile> png_decoder_class;	decoder = new png_decoder_class(src, hdc);	if(decoder->can_decode()) return decoder;	delete decoder;#endif#ifdef AM_GIF	typedef gui::dg::gif_decoder<lib::memfile> gif_decoder_class;	decoder = new gif_decoder_class(src, hdc);	if(decoder->can_decode()) return decoder;	delete decoder;	#endif#ifdef AM_BMP	typedef gui::dg::bmp_decoder<lib::memfile> bmp_decoder_class;	decoder = new bmp_decoder_class(src, hdc);	if(decoder->can_decode()) return decoder;	delete decoder;#endif	return 0;}gui::dg::image_renderer::image_renderer(const net::url& u, net::datasource *src, viewport* v):	m_url(u),	m_dibsurf(0),	m_transparent(false),	m_transp_color(CLR_INVALID) {	open(src, v);}gui::dg::image_renderer::~image_renderer() {	if(m_dibsurf) delete m_dibsurf;}void gui::dg::image_renderer::open(net::datasource *src, viewport* v) {	lib::memfile mf(src);	if(!mf.read()) {		lib::logger::get_logger()->show("%s: Cannot read data", m_url.get_url().c_str());		return;	}		// Decode the image	HDC hdc = ::GetDC(NULL);	img_decoder_class* decoder = create_img_decoder(&mf, hdc);	::DeleteDC(hdc);	if(!decoder) {		lib::logger::get_logger()->show("%s: Cannot create image decoder", m_url.get_url().c_str());		return;	}		m_dibsurf = decoder->decode();	if(!m_dibsurf) {		lib::logger::get_logger()->show("%s: Cannot decode image", m_url.get_url().c_str());		delete decoder;		return;	}	m_transparent = decoder->is_transparent();	m_transp_color = decoder->get_transparent_color();	delete decoder;		m_size.w = DWORD(m_dibsurf->get_pixmap()->get_width());	m_size.h = DWORD(m_dibsurf->get_pixmap()->get_height());} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -