📄 png_provider_generic.h
字号:
/* $Id: png_provider_generic.h,v 1.9 2003/10/14 15:52:12 mbn Exp $
**
** ClanLib Game SDK
** Copyright (C) 2003 The ClanLib Team
** For a total list of contributers see the file CREDITS.
**
** This library 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.
**
** This library 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 this library; if not, write to the Free Software
** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef header_png_provider_generic
#define header_png_provider_generic
#if _MSC_VER > 1000
#pragma once
#endif
#include "API/Display/Providers/png_provider.h"
#include "Display/pixel_buffer_generic.h"
#include "API/Core/IOData/inputsource.h"
#include "API/Core/IOData/inputsource_provider.h"
#include <png.h>
class CL_PNGProvider_Generic : public CL_PixelBuffer_Generic
{
//! Construction:
public:
CL_PNGProvider_Generic(
const std::string &name,
CL_InputSourceProvider *provider = 0,
bool transparent = true,
bool ignore_alphachannel = false);
~CL_PNGProvider_Generic();
//! Attributes:
public:
//: returns Pointer to CL_InputSource
//: (used by libpng-callback CL_PNGProvider::pngread_file() )
CL_InputSource *get_input_source() { return input_source; }
//: Returns the pitch of the image (bytes per line).
unsigned int get_pitch() const { return pitch; }
//: Returns the width of the image.
unsigned int get_width() const { return width; }
//: Returns the height of the image.
unsigned int get_height() const { return height; }
//: Returns the number of subsprites in the image.
unsigned int get_num_frames() const { return 1; }
//: Returns the transparency color used.
unsigned int get_src_colorkey() const { return trans_col; }
//: Returns whether a source colorkey is used.
bool uses_src_colorkey() const { return m_uses_src_colorkey; }
//: Returns whether the target uses an indexed color mode or not.
bool is_indexed() const;
//! Operations:
public:
//: Returns the image data. Provider must be locked before pointer is valid.
virtual void *get_data();
//: Locks the surface provider.
virtual void perform_lock();
//: Unlocks the surface provider.
virtual void perform_unlock();
//! Implementation:
private:
//: Callback used by libpng to retrieve the filedata.
//: (calls get_input_source()->read_uchar8())
static void pngread_file(png_structp png_ptr, png_bytep data, png_size_t length);
void read_data();
void read_data_rgb();
void read_data_rgba();
void read_data_grayscale();
void read_data_grayscale_alpha();
void read_data_palette();
std::string filename;
bool m_uses_src_colorkey;
unsigned char *image;
int pitch;
int no_sprs;
int width;
int height;
bool transparent;
bool ignore_alphachannel;
bool indexed;
int trans_col;
int color_type;
unsigned char trans_redcol, trans_greencol, trans_bluecol;
CL_InputSourceProvider *provider;
CL_InputSource *input_source;
//PNGlib stuff:
png_structp png_ptr;
png_infop info_ptr;
png_infop end_info;
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -