本文整理汇总了C++中png_set_filter函数的典型用法代码示例。如果您正苦于以下问题:C++ png_set_filter函数的具体用法?C++ png_set_filter怎么用?C++ png_set_filter使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了png_set_filter函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: s_PngWriteInit
//
// initialize PNG writing
//
static void s_PngWriteInit(png_structp& png_ptr,
png_infop& info_ptr,
size_t width, size_t height, size_t depth,
CImageIO::ECompress compress)
{
png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL,
s_PngWriteErrorHandler,
s_PngWarningHandler);
if ( !png_ptr ) {
NCBI_THROW(CImageException, eWriteError,
"CImageIOPng::WriteImage(): png_create_read_struct() failed");
}
info_ptr = png_create_info_struct(png_ptr);
if ( !info_ptr ) {
NCBI_THROW(CImageException, eWriteError,
"CImageIOPng::WriteImage(): png_create_info_struct() failed");
}
png_byte color_type = PNG_COLOR_TYPE_RGB;
if (depth == 4) {
color_type = PNG_COLOR_TYPE_RGBA;
}
png_set_IHDR(png_ptr, info_ptr,
width, height, 8, color_type,
PNG_INTERLACE_NONE,
PNG_COMPRESSION_TYPE_BASE,
PNG_FILTER_TYPE_BASE);
// set our compression quality
switch (compress) {
case CImageIO::eCompress_None:
png_set_filter(png_ptr, 0, PNG_FILTER_NONE);
png_set_compression_level(png_ptr, Z_NO_COMPRESSION);
break;
case CImageIO::eCompress_Low:
png_set_filter(png_ptr, 0, PNG_FILTER_NONE);
png_set_compression_level(png_ptr, Z_BEST_SPEED);
break;
case CImageIO::eCompress_Medium:
png_set_compression_level(png_ptr, Z_DEFAULT_COMPRESSION);
break;
case CImageIO::eCompress_High:
png_set_compression_level(png_ptr, Z_BEST_COMPRESSION);
break;
default:
LOG_POST_X(26, Error << "unknown compression type: " << (int)compress);
break;
}
}
开发者ID:svn2github,项目名称:ncbi_tk,代码行数:54,代码来源:image_io_png.cpp
示例2: rgb2png
static size_t rgb2png(ss_t **png, const ss_t *rgb, const struct RGB_Info *ri)
{
RETURN_IF(!valid_rgbi(ri) ||!rgb, 0);
size_t out_size = 0;
png_structp s = png_create_write_struct(PNG_LIBPNG_VER_STRING, 0, 0, 0);
png_infop pi = png_create_info_struct(s);
if (png)
ss_set_size(*png, 0);
png_set_write_fn(s, (png_voidp)png, aux_png_write, NULL);
int ctype = (ri->chn > 1 ? PNG_COLOR_MASK_COLOR : 0) |
(ri->chn == 2 || ri->chn == 4 ? PNG_COLOR_MASK_ALPHA : 0);
png_set_IHDR(s, pi, (png_uint_32)ri->width, (png_uint_32)ri->height,
ri->bpc, ctype, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE,
PNG_FILTER_TYPE_BASE);
png_set_filter(s, PNG_FILTER_TYPE_BASE, PNG_ALL_FILTERS);
png_set_compression_level(s, Z_BEST_COMPRESSION);
png_write_info(s, pi);
png_bytep *rows = (png_bytep *)alloca(sizeof(png_bytep) * pi->height);
if (aux_png_set_rows(rows, pi, ss_get_buffer_r(rgb))) {
png_write_image(s, rows);
png_write_end(s, pi);
out_size = ss_size(*png);
}
png_destroy_info_struct(s, &pi);
png_destroy_write_struct(&s, &pi);
return out_size;
}
开发者ID:lamproae,项目名称:libsrt,代码行数:27,代码来源:imgc.c
示例3: png_create_write_struct
std::unique_ptr<PNGImageEncoderState> PNGImageEncoderState::create(const IntSize& imageSize, Vector<unsigned char>* output)
{
if (imageSize.width() <= 0 || imageSize.height() <= 0)
return nullptr;
png_struct* png = png_create_write_struct(PNG_LIBPNG_VER_STRING, 0, 0, 0);
png_info* info = png_create_info_struct(png);
if (!png || !info || setjmp(png_jmpbuf(png))) {
png_destroy_write_struct(png ? &png : 0, info ? &info : 0);
return nullptr;
}
// Optimize compression for speed.
// The parameters are the same as what libpng uses by default for RGB and RGBA images, except:
// The zlib compression level is set to 3 instead of 6, to avoid the lazy Ziv-Lempel match searching.
png_set_compression_level(png, 3);
// The zlib memory level is set to 8. This actually matches the default, we are just future-proofing.
png_set_compression_mem_level(png, 8);
// The zlib strategy is set to Z_FILTERED, which does not match the default.
// Avoid the zlib strategies Z_HUFFMAN_ONLY or Z_RLE.
// Although they are the fastest for poorly-compressible images (e.g. photographs),
// they are very slow for highly-compressible images (e.g. text, drawings or business graphics)
png_set_compression_strategy(png, Z_FILTERED);
// The delta filter is PNG_FILTER_SUB instead of PNG_ALL_FILTERS, to reduce the filter computations.
png_set_filter(png, PNG_FILTER_TYPE_BASE, PNG_FILTER_SUB);
png_set_write_fn(png, output, writeOutput, 0);
png_set_IHDR(png, info, imageSize.width(), imageSize.height(), 8, PNG_COLOR_TYPE_RGB_ALPHA, 0, 0, 0);
png_write_info(png, info);
return wrapUnique(new PNGImageEncoderState(png, info));
}
开发者ID:endlessm,项目名称:chromium-browser,代码行数:35,代码来源:PNGImageEncoder.cpp
示例4: write_png
static void write_png(const png_bytep rgba, png_uint_32 width, png_uint_32 height, SkWStream& out) {
png_structp png = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
SkASSERT(png != nullptr);
png_infop info_ptr = png_create_info_struct(png);
SkASSERT(info_ptr != nullptr);
if (setjmp(png_jmpbuf(png))) {
SkFAIL("png encode error");
}
png_set_IHDR(png, info_ptr, width, height, 8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE,
PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
png_set_compression_level(png, 1);
png_bytepp rows = (png_bytepp) sk_malloc_throw(height * sizeof(png_byte*));
png_bytep pixels = (png_bytep) sk_malloc_throw(width * height * 3);
for (png_size_t y = 0; y < height; ++y) {
const png_bytep src = rgba + y * width * 4;
rows[y] = pixels + y * width * 3;
// convert from RGBA to RGB
for (png_size_t x = 0; x < width; ++x) {
rows[y][x * 3] = src[x * 4];
rows[y][x * 3 + 1] = src[x * 4 + 1];
rows[y][x * 3 + 2] = src[x * 4 + 2];
}
}
png_set_filter(png, 0, PNG_NO_FILTERS);
png_set_rows(png, info_ptr, &rows[0]);
png_set_write_fn(png, &out, write_png_callback, NULL);
png_write_png(png, info_ptr, PNG_TRANSFORM_IDENTITY, NULL);
png_destroy_write_struct(&png, NULL);
sk_free(rows);
}
开发者ID:nagyist,项目名称:google-skia,代码行数:30,代码来源:Request.cpp
示例5: WritePNG
errort WritePNG( FILE * fp , unsigned char * data, unsigned int sizeX, unsigned int sizeY, int img_depth, int img_alpha)
{
png_structp png_ptr = png_create_write_struct
(PNG_LIBPNG_VER_STRING, (png_voidp)NULL,NULL,NULL);
if (!png_ptr)
return BadFormat;
png_infop info_ptr = png_create_info_struct(png_ptr);
if (!info_ptr) {
png_destroy_write_struct(&png_ptr, (png_infopp)NULL);
return BadFormat;
}
if (setjmp(png_ptr->jmpbuf)) {
png_destroy_write_struct(&png_ptr, &info_ptr);
return BadFormat;
}
png_init_io(png_ptr, fp);
png_set_filter(png_ptr, 0, PNG_FILTER_NONE);
png_set_compression_level(png_ptr, Z_BEST_COMPRESSION);
/* set other zlib parameters */
png_set_compression_mem_level(png_ptr, 8);
png_set_compression_strategy(png_ptr, Z_DEFAULT_STRATEGY);
png_set_compression_window_bits(png_ptr, 15);
png_set_compression_method(png_ptr, 8);
png_set_IHDR(png_ptr,
info_ptr,
sizeX,
sizeY,
img_depth,
img_alpha?PNG_COLOR_TYPE_RGB_ALPHA:PNG_COLOR_TYPE_RGB,
PNG_INTERLACE_NONE,
PNG_COMPRESSION_TYPE_DEFAULT,
PNG_FILTER_TYPE_DEFAULT);
png_write_info(png_ptr, info_ptr);
# if __BYTE_ORDER != __BIG_ENDIAN
if (img_depth==16) {
png_set_swap(png_ptr);
}
#endif
int stride = (img_depth/8)*(img_alpha?4:3);
png_byte **row_pointers = new png_byte*[sizeY];
for (unsigned int i=0;i<sizeY;i++) {
row_pointers[i]= (png_byte *)&data[stride*i*sizeX];
}
png_write_image (png_ptr,row_pointers);
png_write_end(png_ptr, info_ptr);
png_write_flush(png_ptr);
png_destroy_write_struct(&png_ptr, &info_ptr);
//free (data);
delete [] row_pointers;
return Ok;
}
开发者ID:bsmr-games,项目名称:Privateer-Gemini-Gold,代码行数:58,代码来源:shrinker.cpp
示例6: write_png
void write_png(FileSystem::FileSourceFS &fs, const std::string &path, const Uint8 *bytes, int width, int height, int stride, int bytes_per_pixel) {
png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, 0, 0, 0);
if (!png_ptr) {
fprintf(stderr, "Couldn't create png_write_struct\n");
return;
}
png_infop info_ptr = png_create_info_struct(png_ptr);
if (!info_ptr) {
png_destroy_write_struct(&png_ptr, 0);
fprintf(stderr, "Couldn't create png_info_struct\n");
return;
}
//http://www.libpng.org/pub/png/libpng-1.2.5-manual.html#section-3.1
if (setjmp(png_jmpbuf(png_ptr))) {
png_destroy_write_struct(&png_ptr, &info_ptr);
fprintf(stderr, "Couldn't set png jump buffer\n");
return;
}
FILE *out = fs.OpenWriteStream(path);
if (!out) {
png_destroy_write_struct(&png_ptr, &info_ptr);
fprintf(stderr, "Couldn't open '%s/%s' for writing\n", fs.GetRoot().c_str(), path.c_str());
return;
}
int colour_type;
switch (bytes_per_pixel) {
case 1: colour_type = PNG_COLOR_TYPE_GRAY; break;
case 2: colour_type = PNG_COLOR_TYPE_GRAY_ALPHA; break;
case 3: colour_type = PNG_COLOR_TYPE_RGB; break;
case 4: colour_type = PNG_COLOR_TYPE_RGB_ALPHA; break;
default: assert(0); return;
}
png_init_io(png_ptr, out);
png_set_filter(png_ptr, 0, PNG_FILTER_NONE);
png_set_IHDR(png_ptr, info_ptr, width, height, 8, colour_type,
PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT,
PNG_FILTER_TYPE_DEFAULT);
png_bytepp rows = new png_bytep[height];
for (int i = 0; i < height; ++i) {
const Uint8 *row = bytes + ((height-i-1) * stride);
rows[i] = const_cast<Uint8*>(row);
}
png_set_rows(png_ptr, info_ptr, rows);
png_write_png(png_ptr, info_ptr, PNG_TRANSFORM_IDENTITY, 0);
png_destroy_write_struct(&png_ptr, &info_ptr);
delete[] rows;
fclose(out);
}
开发者ID:GizmoR13,项目名称:pioneer,代码行数:58,代码来源:PngWriter.cpp
示例7: fopen
bool CPNGFile::Save(const char *szFilename)
{
// regular file saving - first, there has to be a buffer
if (!pImageData) return false;
// open the file
fp = fopen(szFilename, "wb"); if (!fp) return false;
// clear any previously initialized png-structs (e.g. by reading)
ClearPngStructs();
// reinit them for writing
fWriteMode=true;
png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
if (!png_ptr) { Clear(); return false; }
info_ptr = png_create_info_struct(png_ptr);
if (!info_ptr) { Clear(); return false; }
// error handling
if (setjmp(png_jmpbuf(png_ptr))) { Clear(); return false; }
// io initialization
png_init_io(png_ptr, fp);
// compression stuff
png_set_filter(png_ptr, 0, PNG_FILTER_NONE | PNG_FILTER_SUB | PNG_FILTER_PAETH);
png_set_compression_level(png_ptr, Z_BEST_COMPRESSION);
png_set_compression_mem_level(png_ptr, 8);
png_set_compression_strategy(png_ptr, Z_DEFAULT_STRATEGY);
png_set_compression_window_bits(png_ptr, 15);
png_set_compression_method(png_ptr, 8);
// set header
png_set_IHDR(png_ptr, info_ptr, iWdt, iHgt, iBPC, iClrType, iIntrlcType, iCmprType, iFltrType);
// double-check our calculated row size
int iRealRowSize=png_get_rowbytes(png_ptr, info_ptr);
if (iRealRowSize != iRowSize)
{
// this won't go well, so better abort
Clear(); return false;
}
// write png header
png_write_info(png_ptr, info_ptr);
// image data is given as bgr...
png_set_bgr(png_ptr);
// create row array
unsigned char **ppRowBuf = new unsigned char *[iHgt];
unsigned char **ppRows=ppRowBuf; unsigned char *pRow=pImageData;
for (unsigned int i=0; i<iHgt; ++i,pRow+=iRowSize) *ppRows++=pRow;
// write image
png_write_image(png_ptr, ppRowBuf);
// free row buffer
delete [] ppRowBuf;
// write end struct
png_write_end(png_ptr, info_ptr);
// finally, close the file
fclose(fp); fp = NULL;
// clear png structs
ClearPngStructs();
// success!
return true;
}
开发者ID:sarah-russell12,项目名称:openclonk,代码行数:55,代码来源:StdPNG.cpp
示例8: png_write
void png_write( const char *myfile, unsigned char *data, unsigned int width, unsigned int height, bool alpha, char bpp )
{
FILE *fp = VSFileSystem::vs_open( myfile, "wb" );
png_structp png_ptr = png_create_write_struct
( PNG_LIBPNG_VER_STRING, (png_voidp) NULL, NULL, NULL );
if (!png_ptr)
return;
png_infop info_ptr = png_create_info_struct( png_ptr );
if (!info_ptr) {
png_destroy_write_struct( &png_ptr, (png_infopp) NULL );
return;
}
if ( setjmp( png_ptr->jmpbuf ) ) {
png_destroy_write_struct( &png_ptr, &info_ptr );
VSFileSystem::vs_close( fp );
return;
}
png_init_io( png_ptr, fp );
png_set_filter( png_ptr, 0, PNG_FILTER_NONE );
png_set_compression_level( png_ptr, Z_BEST_COMPRESSION );
/* set other zlib parameters */
png_set_compression_mem_level( png_ptr, 8 );
png_set_compression_strategy( png_ptr, Z_DEFAULT_STRATEGY );
png_set_compression_window_bits( png_ptr, 15 );
png_set_compression_method( png_ptr, 8 );
png_set_IHDR( png_ptr,
info_ptr,
width,
height,
bpp,
alpha ? PNG_COLOR_TYPE_RGB_ALPHA : PNG_COLOR_TYPE_RGB,
PNG_INTERLACE_NONE,
PNG_COMPRESSION_TYPE_DEFAULT,
PNG_FILTER_TYPE_DEFAULT );
png_write_info( png_ptr, info_ptr );
# if __BYTE_ORDER != __BIG_ENDIAN
if (bpp == 16)
png_set_swap( png_ptr );
#endif
int stride = (bpp/8)*(alpha ? 4 : 3);
png_byte **row_pointers = new png_byte*[height];
for (unsigned int i = 0; i < height; i++)
row_pointers[i] = (png_byte*) &data[stride*i*width];
png_write_image( png_ptr, row_pointers );
png_write_end( png_ptr, info_ptr );
png_write_flush( png_ptr );
png_destroy_write_struct( &png_ptr, &info_ptr );
VSFileSystem::vs_close( fp );
free( data );
delete[] row_pointers;
}
开发者ID:vegastrike,项目名称:Vega-Strike-Engine-Source,代码行数:55,代码来源:bmp_to_png.cpp
示例9: png_create_write_struct
void PNGImageWriter::beginOfImage(int cols, int rows) {
_png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
_info_ptr = png_create_info_struct(_png_ptr);
if (!_info_ptr) {
png_destroy_write_struct(&_png_ptr, NULL);
exit(1);
}
png_set_IHDR(_png_ptr,
_info_ptr,
cols,
rows,
16,
PNG_COLOR_TYPE_GRAY,
PNG_INTERLACE_NONE,
NULL/*PNG_COMPRESSION_TYPE_DEFAULT*/,
PNG_FILTER_TYPE_DEFAULT);
//png_set_filter(_png_ptr, 0, PNG_FILTER_NONE);
//png_set_packing(_png_ptr);
png_set_compression_level(_png_ptr, 0); // No compression
png_set_filter(_png_ptr, 0 /* method */, PNG_NO_FILTERS);
png_color_8 sig_bit;
sig_bit.gray = 16;
sig_bit.red = 0;
sig_bit.green = 0;
sig_bit.blue = 0;
sig_bit.alpha = 0;
png_set_sBIT(_png_ptr, _info_ptr, &sig_bit);
//png_set_shift(_png_ptr, &sig_bit);
//png_set_gamma(_png_ptr, 1., 1.);
png_set_strip_16(_png_ptr);
//if (lsb)
//png_set_swap(_png_ptr);
// flush output after every row
if (_lineBuffered)
png_set_flush(_png_ptr, 1);
//png_set_filler(_png_ptr, 0, PNG_FILLER_BEFORE);
// Represent black as 1 and white as 0 instead of the PNG default.
//png_set_invert_mono(_png_ptr);
png_init_io(_png_ptr, _output);
/* write the file information */
png_write_info(_png_ptr, _info_ptr);
}
开发者ID:arnaudetitia,项目名称:DGtalTools,代码行数:52,代码来源:PNGImageWriter.cpp
示例10: gdImagePng
void gdImagePng(gdImagePtr im, FILE *out)
{
int i;
png_colorp palette;
png_structp png_write_ptr =
png_create_write_struct(PNG_LIBPNG_VER_STRING,
(png_voidp)NULL,
/* we would need to point to error handlers
here to do it properly */
(png_error_ptr)NULL, (png_error_ptr)NULL);
png_infop info_ptr = png_create_info_struct(png_write_ptr);
if (setjmp(gdPngJmpbufStruct.jmpbuf)) {
png_destroy_write_struct(&png_write_ptr, &info_ptr);
return;
}
palette = (png_colorp)png_malloc (png_write_ptr,
im->colorsTotal*sizeof(png_color));
if (palette == NULL) {
png_destroy_write_struct(&png_write_ptr, &info_ptr);
return;
}
png_init_io(png_write_ptr, out);
png_set_write_status_fn(png_write_ptr, NULL);
png_set_IHDR(png_write_ptr,info_ptr,
im->sx,im->sy,im->colorsTotal > 16 ? 8:4,
PNG_COLOR_TYPE_PALETTE,
im->interlace ? PNG_INTERLACE_ADAM7: PNG_INTERLACE_NONE ,
PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
for(i=0; i<im->colorsTotal; i++) {
palette[i].red = im->red[i];
palette[i].green = im->green[i];
palette[i].blue = im->blue[i];
}
png_set_PLTE(png_write_ptr, info_ptr, palette, im->colorsTotal);
/* choose between speed (1) and space (9) optimization */
/* we want to be fast ... */
png_set_compression_level(png_write_ptr,1);
png_set_filter(png_write_ptr,PNG_FILTER_TYPE_BASE,PNG_NO_FILTERS);
/* store file info */
png_write_info(png_write_ptr, info_ptr);
png_set_packing(png_write_ptr);
png_write_image(png_write_ptr, im->pixels);
png_write_end(png_write_ptr, info_ptr);
png_free(png_write_ptr, palette);
png_destroy_write_struct(&png_write_ptr, &info_ptr);
}
开发者ID:blair,项目名称:orca,代码行数:51,代码来源:gdpng.c
示例11: error
bool
PNGOutput::open (const std::string &name, const ImageSpec &userspec,
OpenMode mode)
{
if (mode != Create) {
error ("%s does not support subimages or MIP levels", format_name());
return false;
}
close (); // Close any already-opened file
m_spec = userspec; // Stash the spec
m_file = Filesystem::fopen (name, "wb");
if (! m_file) {
error ("Could not open file \"%s\"", name.c_str());
return false;
}
std::string s = PNG_pvt::create_write_struct (m_png, m_info,
m_color_type, m_spec);
if (s.length ()) {
close ();
error ("%s", s.c_str ());
return false;
}
png_init_io (m_png, m_file);
int compression_level = 6; /* medium speed vs size tradeoff */
// RTT MOD: CVI use incoming compression values
const ImageIOParameter *compParameter = m_spec.find_attribute ("CompressionQuality",TypeDesc::INT);
if (compParameter)
{
compression_level = *(const int *)compParameter->data();
compression_level = std::min( std::max( compression_level, 0 ), 9 ); // compression 0-9
}
png_set_compression_level (m_png, compression_level);
const ImageIOParameter *filterParameter = m_spec.find_attribute ("png:Filters",TypeDesc::INT);
if (filterParameter)
{
int filters = *(const int *)filterParameter->data();
filters &= PNG_ALL_FILTERS;
png_set_filter(m_png, 0, filters);
}
PNG_pvt::write_info (m_png, m_info, m_color_type, m_spec, m_pngtext);
return true;
}
开发者ID:rttag,项目名称:oiio,代码行数:51,代码来源:pngoutput.cpp
示例12: GetFrontBufferPixels
void CSnapShot::WriteImageToFile(CThread * pThread)
{
m_threadData.bWriting = true;
D3DDISPLAYMODE displayMode;
g_pCore->GetGraphics()->GetDevice()->GetDisplayMode(0, &displayMode);
UINT uiScreenWidth = displayMode.Width;
UINT uiScreenHeight = displayMode.Height;
BYTE* mem = new BYTE[SCREEN_SHOT_FORMAT_BYTES_PER_PIXEL * uiScreenWidth * uiScreenWidth];
GetFrontBufferPixels(uiScreenWidth, uiScreenHeight, mem);
BYTE** ScreenData = nullptr;
ScreenData = new BYTE* [uiScreenHeight];
for (unsigned short y = 0; y < uiScreenHeight; y++) {
ScreenData[y] = new BYTE[uiScreenWidth * SCREEN_SHOT_FORMAT_BYTES_PER_PIXEL];
}
UINT uiLinePitch = uiScreenWidth * SCREEN_SHOT_FORMAT_BYTES_PER_PIXEL;
unsigned long ulLineWidth = uiScreenWidth * SCREEN_SHOT_FORMAT_BYTES_PER_PIXEL;
for (unsigned int i = 0; i < uiScreenHeight; i++) {
memcpy(ScreenData[i], (BYTE*) mem + i* uiLinePitch, ulLineWidth);
for(unsigned int j = 3; j < ulLineWidth; j += SCREEN_SHOT_FORMAT_BYTES_PER_PIXEL) {
ScreenData[i][j] = 0xFF;
}
}
CString strPath = GetScreenShotPath();
FILE *file = fopen(strPath, "wb");
png_struct* png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
png_info* info_ptr = png_create_info_struct(png_ptr);
png_init_io(png_ptr, file);
png_set_filter(png_ptr, 0, PNG_FILTER_NONE);
png_set_compression_level(png_ptr, 9);
png_set_IHDR(png_ptr, info_ptr, uiScreenWidth, uiScreenHeight, 8, PNG_COLOR_TYPE_RGB_ALPHA, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
png_set_rows(png_ptr, info_ptr, ScreenData);
png_write_png(png_ptr, info_ptr, PNG_TRANSFORM_BGR | PNG_TRANSFORM_STRIP_ALPHA, NULL);
png_write_end(png_ptr, info_ptr);
png_destroy_write_struct(&png_ptr, &info_ptr);
fclose(file);
for (unsigned short y = 0; y < uiScreenHeight; y++) {
delete []ScreenData[y];
}
delete []ScreenData;
delete []mem;
m_threadData.bWriting = false;
}
开发者ID:Disinterpreter,项目名称:IV-Network,代码行数:50,代码来源:CSnapShot.cpp
示例13: save_as_png
void save_as_png(T1 & file,
T2 const& image,
png_options const& opts)
{
png_voidp error_ptr=0;
png_structp png_ptr=png_create_write_struct(PNG_LIBPNG_VER_STRING,
error_ptr,0, 0);
if (!png_ptr) return;
// switch on optimization only if supported
#if defined(PNG_LIBPNG_VER) && (PNG_LIBPNG_VER >= 10200) && defined(PNG_MMX_CODE_SUPPORTED)
png_uint_32 mask, flags;
flags = png_get_asm_flags(png_ptr);
mask = png_get_asm_flagmask(PNG_SELECT_READ | PNG_SELECT_WRITE);
png_set_asm_flags(png_ptr, flags | mask);
#endif
png_set_filter(png_ptr, PNG_FILTER_TYPE_BASE, PNG_FILTER_NONE);
png_infop info_ptr = png_create_info_struct(png_ptr);
if (!info_ptr)
{
png_destroy_write_struct(&png_ptr,static_cast<png_infopp>(0));
return;
}
jmp_buf* jmp_context = static_cast<jmp_buf*>(png_get_error_ptr(png_ptr));
if (jmp_context)
{
png_destroy_write_struct(&png_ptr, &info_ptr);
return;
}
png_set_write_fn (png_ptr, &file, &write_data<T1>, &flush_data<T1>);
png_set_compression_level(png_ptr, opts.compression);
png_set_compression_strategy(png_ptr, opts.strategy);
png_set_compression_buffer_size(png_ptr, 32768);
png_set_IHDR(png_ptr, info_ptr,image.width(),image.height(),8,
(opts.trans_mode == 0) ? PNG_COLOR_TYPE_RGB : PNG_COLOR_TYPE_RGB_ALPHA,PNG_INTERLACE_NONE,
PNG_COMPRESSION_TYPE_DEFAULT,PNG_FILTER_TYPE_DEFAULT);
const std::unique_ptr<png_bytep[]> row_pointers(new png_bytep[image.height()]);
for (unsigned int i = 0; i < image.height(); i++)
{
row_pointers[i] = const_cast<png_bytep>(reinterpret_cast<const unsigned char *>(image.get_row(i)));
}
png_set_rows(png_ptr, info_ptr, row_pointers.get());
png_write_png(png_ptr, info_ptr, (opts.trans_mode == 0) ? PNG_TRANSFORM_STRIP_FILLER_AFTER : PNG_TRANSFORM_IDENTITY, nullptr);
png_destroy_write_struct(&png_ptr, &info_ptr);
}
开发者ID:DavidLiuGitHub,项目名称:mapnik,代码行数:49,代码来源:png_io.hpp
示例14: open_png
void
open_png(void)
{
png_ptr=png_create_write_struct(PNG_LIBPNG_VER_STRING,NULL,NULL,NULL);
info_ptr=png_create_info_struct(png_ptr);
png_init_io(png_ptr,of);
png_set_filter(png_ptr,0,PNG_FILTER_NONE|PNG_FILTER_SUB|PNG_FILTER_UP
|PNG_FILTER_AVG|PNG_FILTER_PAETH);
png_set_compression_level(png_ptr,Z_BEST_COMPRESSION);
png_set_IHDR(png_ptr,info_ptr,ox,oy,8,PNG_COLOR_TYPE_GRAY,PNG_INTERLACE_NONE,
PNG_COMPRESSION_TYPE_DEFAULT,PNG_FILTER_TYPE_DEFAULT);
png_set_gAMA(png_ptr,info_ptr,1.0);
png_set_pHYs(png_ptr,info_ptr,ppm,ppm,PNG_RESOLUTION_METER);
png_write_info(png_ptr,info_ptr);
}
开发者ID:engine12,项目名称:links,代码行数:15,代码来源:pbm2png.c
示例15: writePNG
void writePNG (png_bytepp imageBuffer, png_uint_32 width, png_uint_32 height, int iteration) {
const char *fname = "out.png";
FILE *fp = fopen(fname, "wb");
if (!fp) return;
png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
png_infop info_ptr = png_create_info_struct(png_ptr);
png_init_io(png_ptr, fp);
png_set_filter(png_ptr, PNG_FILTER_TYPE_DEFAULT, PNG_FILTER_NONE);
png_set_compression_level(png_ptr, Z_BEST_COMPRESSION);
png_set_IHDR(png_ptr, info_ptr, width, height, 8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
png_set_rows(png_ptr, info_ptr, imageBuffer);
png_write_png(png_ptr, info_ptr, PNG_TRANSFORM_IDENTITY, NULL);
png_destroy_write_struct(&png_ptr, &info_ptr);
fclose(fp);
}
开发者ID:wito,项目名称:raytrace,代码行数:16,代码来源:raytrace.c
示例16: encodePixels
static bool encodePixels(IntSize imageSize, const unsigned char* inputPixels, bool premultiplied, Vector<unsigned char>* output)
{
if (imageSize.width() <= 0 || imageSize.height() <= 0)
return false;
Vector<unsigned char> row;
png_struct* png = png_create_write_struct(PNG_LIBPNG_VER_STRING, 0, 0, 0);
png_info* info = png_create_info_struct(png);
if (!png || !info || setjmp(png_jmpbuf(png))) {
png_destroy_write_struct(png ? &png : 0, info ? &info : 0);
return false;
}
// Optimize compression for speed.
// The parameters are the same as what libpng uses by default for RGB and RGBA images, except:
// - the zlib compression level is 3 instead of 6, to avoid the lazy Ziv-Lempel match searching;
// - the delta filter is 1 ("sub") instead of 5 ("all"), to reduce the filter computations.
// The zlib memory level (8) and strategy (Z_FILTERED) will be set inside libpng.
//
// Avoid the zlib strategies Z_HUFFMAN_ONLY or Z_RLE.
// Although they are the fastest for poorly-compressible images (e.g. photographs),
// they are very slow for highly-compressible images (e.g. text, drawings or business graphics).
png_set_compression_level(png, 3);
png_set_filter(png, PNG_FILTER_TYPE_BASE, PNG_FILTER_SUB);
png_set_write_fn(png, output, writeOutput, 0);
png_set_IHDR(png, info, imageSize.width(), imageSize.height(),
8, PNG_COLOR_TYPE_RGB_ALPHA, 0, 0, 0);
png_write_info(png, info);
unsigned char* pixels = const_cast<unsigned char*>(inputPixels);
row.resize(imageSize.width() * sizeof(SkPMColor));
const size_t pixelRowStride = imageSize.width() * 4;
for (int y = 0; y < imageSize.height(); ++y) {
if (premultiplied) {
preMultipliedBGRAtoRGBA(pixels, imageSize.width(), row.data());
png_write_row(png, row.data());
} else
png_write_row(png, pixels);
pixels += pixelRowStride;
}
png_write_end(png, info);
png_destroy_write_struct(&png, &info);
return true;
}
开发者ID:smishenk,项目名称:chromium-crosswalk,代码行数:47,代码来源:PNGImageEncoder.cpp
示例17: memcpy
// Callback for threaded save
// Static function
DWORD CScreenShot::ThreadProc ( LPVOID lpdwThreadParam )
{
unsigned long ulScreenHeight = ms_ScreenSize.bottom - ms_ScreenSize.top;
unsigned long ulScreenWidth = ms_ScreenSize.right - ms_ScreenSize.left;
// Create the screen data buffer
BYTE** ppScreenData = NULL;
ppScreenData = new BYTE* [ ulScreenHeight ];
for ( unsigned short y = 0; y < ulScreenHeight; y++ ) {
ppScreenData[y] = new BYTE [ ulScreenWidth * 4 ];
}
// Copy the surface data into a row-based buffer for libpng
#define BYTESPERPIXEL 4
unsigned long ulLineWidth = ulScreenWidth * 4;
for ( unsigned int i = 0; i < ulScreenHeight; i++ ) {
memcpy ( ppScreenData[i], (BYTE*) ms_pBits + i* ms_ulPitch, ulLineWidth );
for ( unsigned int j = 3; j < ulLineWidth; j += BYTESPERPIXEL ) {
ppScreenData[i][j] = 0xFF;
}
}
FILE *file = fopen (ms_strFileName, "wb");
png_struct* png_ptr = png_create_write_struct ( PNG_LIBPNG_VER_STRING, NULL, NULL, NULL );
png_info* info_ptr = png_create_info_struct ( png_ptr );
png_init_io ( png_ptr, file );
png_set_filter ( png_ptr, 0, PNG_FILTER_NONE );
png_set_compression_level ( png_ptr, 1 );
png_set_IHDR ( png_ptr, info_ptr, ulScreenWidth, ulScreenHeight, 8, PNG_COLOR_TYPE_RGB_ALPHA, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT );
png_set_rows ( png_ptr, info_ptr, ppScreenData );
png_write_png ( png_ptr, info_ptr, PNG_TRANSFORM_BGR | PNG_TRANSFORM_STRIP_ALPHA, NULL );
png_write_end ( png_ptr, info_ptr );
png_destroy_write_struct ( &png_ptr, &info_ptr );
fclose(file);
// Clean up the screen data buffer
if ( ppScreenData ) {
for ( unsigned short y = 0; y < ulScreenHeight; y++ ) {
delete [] ppScreenData[y];
}
delete [] ppScreenData;
}
ms_bIsSaving = false;
return 0;
}
开发者ID:EagleShen,项目名称:MTA,代码行数:48,代码来源:CScreenShot.cpp
示例18: save_as_png
void save_as_png(T1 & file , T2 const& image, int compression = Z_DEFAULT_COMPRESSION, int strategy = Z_DEFAULT_STRATEGY)
{
png_voidp error_ptr=0;
png_structp png_ptr=png_create_write_struct(PNG_LIBPNG_VER_STRING,
error_ptr,0, 0);
if (!png_ptr) return;
// switch on optimization only if supported
#if defined(PNG_LIBPNG_VER) && (PNG_LIBPNG_VER >= 10200) && defined(PNG_MMX_CODE_SUPPORTED)
png_uint_32 mask, flags;
flags = png_get_asm_flags(png_ptr);
mask = png_get_asm_flagmask(PNG_SELECT_READ | PNG_SELECT_WRITE);
png_set_asm_flags(png_ptr, flags | mask);
#endif
png_set_filter(png_ptr, PNG_FILTER_TYPE_BASE, PNG_FILTER_NONE);
png_infop info_ptr = png_create_info_struct(png_ptr);
if (!info_ptr)
{
png_destroy_write_struct(&png_ptr,(png_infopp)0);
return;
}
jmp_buf* jmp_context = (jmp_buf*) png_get_error_ptr(png_ptr);
if (jmp_context)
{
png_destroy_write_struct(&png_ptr, &info_ptr);
return;
}
png_set_write_fn (png_ptr, &file, &write_data<T1>, &flush_data<T1>);
png_set_compression_level(png_ptr, compression);
png_set_compression_strategy(png_ptr, strategy);
png_set_compression_buffer_size(png_ptr, 32768);
png_set_IHDR(png_ptr, info_ptr,image.width(),image.height(),8,
PNG_COLOR_TYPE_RGB_ALPHA,PNG_INTERLACE_NONE,
PNG_COMPRESSION_TYPE_DEFAULT,PNG_FILTER_TYPE_DEFAULT);
png_write_info(png_ptr, info_ptr);
for (unsigned i=0;i<image.height();i++)
{
png_write_row(png_ptr,(png_bytep)image.getRow(i));
}
png_write_end(png_ptr, info_ptr);
png_destroy_write_struct(&png_ptr, &info_ptr);
}
开发者ID:doubleotoo,项目名称:mapnik,代码行数:46,代码来源:png_io.hpp
示例19: png_write_data
int png_write_data(const char *filename, uint8 *data, uint32 width, uint32 height)
{
FILE *fp;
uint32_t i;
fp = fopen(filename, "wb");
if (!fp) return -1;
png_structp png_ptr = png_create_write_struct
(PNG_LIBPNG_VER_STRING, (png_voidp)NULL,
NULL, NULL);
if (!png_ptr)
return false;
png_infop info_ptr = png_create_info_struct(png_ptr);
if (!info_ptr)
{
png_destroy_write_struct(&png_ptr,(png_infopp)NULL);
return false;
}
png_init_io(png_ptr, fp);
png_set_filter(png_ptr, 0, PNG_FILTER_VALUE_NONE);
png_set_compression_level(png_ptr, Z_BEST_COMPRESSION);
png_set_IHDR(png_ptr, info_ptr, width, height, 8,
PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE,
PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
png_bytepp row_pointers = (png_bytepp)malloc(sizeof(png_bytep)*height);
for(i = 0; i < height; i++)
row_pointers[i] = &data[3*i*width];
png_set_rows(png_ptr, info_ptr, row_pointers);
png_write_png(png_ptr, info_ptr, PNG_TRANSFORM_IDENTITY, NULL);
png_destroy_write_struct(&png_ptr, &info_ptr);
free(row_pointers);
fclose(fp);
return 0;
}
开发者ID:foreverlikeyou9999,项目名称:kos-ports,代码行数:45,代码来源:writepng.c
示例20: opng_encode_image
/*
* Encodes an image to a PNG file stream.
*/
int opng_encode_image(struct opng_codec_context *context, int filtered, FILE *stream, const char *fname, int level)
{
const char * volatile err_msg; /* volatile is required by cexcept */
context->libpng_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, 0, opng_write_error, opng_write_warning);
context->info_ptr = png_create_info_struct(context->libpng_ptr);
if (!context->libpng_ptr || !context->info_ptr)
{
opng_error(0, "Out of memory");
png_destroy_write_struct(&context->libpng_ptr, &context->info_ptr);
exit(1);
}
struct opng_encoding_stats * stats = context->stats;
opng_init_stats(stats);
context->stream = stream;
context->fname = fname;
Try
{
png_set_filter(context->libpng_ptr, PNG_FILTER_TYPE_BASE, filtered ? PNG_ALL_FILTERS : PNG_FILTER_NONE);
if (level != 6) {
png_set_compression_level(context->libpng_ptr, level);
}
png_set_compression_mem_level(context->libpng_ptr, 8);
png_set_compression_window_bits(context->libpng_ptr, 15);
png_set_compression_strategy(context->libpng_ptr, 0);
png_set_keep_unknown_chunks(context->libpng_ptr, PNG_HANDLE_CHUNK_ALWAYS, 0, 0);
opng_store_image(context->image, context->libpng_ptr, context->info_ptr);
/* Write the PNG stream. */
png_set_write_fn(context->libpng_ptr, context, opng_write_data, 0);
png_write_png(context->libpng_ptr, context->info_ptr, 0, 0);
}
Catch (err_msg)
{
stats->idat_size = OPTK_INT64_MAX;
opng_error(fname, err_msg);
return -1;
}
png_data_freer(context->libpng_ptr, context->info_ptr, PNG_USER_WILL_FREE_DATA, PNG_FREE_ALL);
png_destroy_write_struct(&context->libpng_ptr, &context->info_ptr);
return 0;
}
开发者ID:RamiroCruzo,项目名称:Efficient-Compression-Tool,代码行数:48,代码来源:codec.c
注:本文中的png_set_filter函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论