亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? qanimationwriter.cpp

?? linux下 minigui用的 qvfb 1.1插件
?? CPP
字號(hào):
/******************************************************************************** Qt/Embedded virtual framebuffer**** Created : 20000605**** Copyright (C) 1992-2000 Trolltech AS.  All rights reserved.**** This file is part of the Qt GUI Toolkit.**** Licensees holding valid Qt Professional Edition licenses may use this** file in accordance with the Qt Professional Edition License Agreement** provided with the Qt Professional Edition.**** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for** information about the Professional Edition licensing.*******************************************************************************/#define QT_CLEAN_NAMESPACE#include "qanimationwriter.h"#include <qfile.h>#include <png.h>#include <netinet/in.h> // for htonlclass QAnimationWriterData {public:    QAnimationWriterData(QIODevice* d) : dev(d)    {	framerate = 1000;    }    void setFrameRate(int d) { framerate = d; }    virtual ~QAnimationWriterData() { }    virtual void setImage(const QImage& src)=0;    virtual bool canCompose() const { return FALSE; }    virtual void composeImage(const QImage&, const QPoint& ) { }protected:    int framerate;    QIODevice* dev;};class QAnimationWriterMNG : public QAnimationWriterData {    bool first;    png_structp png_ptr;    png_infop info_ptr;public:    QAnimationWriterMNG(QIODevice* d) : QAnimationWriterData(d)    {	first = TRUE;	begin_png();    }    ~QAnimationWriterMNG()    {	if ( first ) {	    // Eh? Not images.	    QImage dummy(1,1,32);	    setImage(dummy);	}	writeMEND();	end_png();    }    void begin_png()    {	png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING,0,0,0);	info_ptr = png_create_info_struct(png_ptr);	png_set_compression_level(png_ptr,9);	png_set_write_fn(png_ptr, (void*)this, write, 0);    }    void end_png()    {	png_destroy_write_struct(&png_ptr, &info_ptr);    }    static void write( png_structp png_ptr, png_bytep data, png_size_t length)    {	QAnimationWriterMNG* that = (QAnimationWriterMNG*)png_get_io_ptr(png_ptr);	/*uint nw =*/ that->dev->writeBlock((const char*)data,length);    }    void writePNG(const QImage& image)    {	info_ptr->channels = 4;	png_set_sig_bytes(png_ptr, 8); // Pretend we already wrote the sig	png_set_IHDR(png_ptr, info_ptr, image.width(), image.height(),	    8, image.hasAlphaBuffer()		    ? PNG_COLOR_TYPE_RGB_ALPHA : PNG_COLOR_TYPE_RGB,	    0, 0, 0);	png_write_info(png_ptr, info_ptr);	if ( !image.hasAlphaBuffer() )	    png_set_filler(png_ptr, 0,		QImage::systemByteOrder() == QImage::BigEndian ?		    PNG_FILLER_BEFORE : PNG_FILLER_AFTER);	//if ( QImage::systemByteOrder() == QImage::BigEndian ) {            //png_set_swap_alpha(png_ptr);        //}	if ( QImage::systemByteOrder() == QImage::LittleEndian ) {	    png_set_bgr(png_ptr);	}	png_bytep* row_pointers;	uint height = image.height();	uchar** jt = image.jumpTable();	row_pointers=new png_bytep[height];	uint y;	for (y=0; y<height; y++) {		row_pointers[y]=jt[y];	}	png_write_image(png_ptr, row_pointers);	delete [] row_pointers;	png_write_end(png_ptr, info_ptr);	end_png();	begin_png();    }    void writeMHDR( const QSize& size, int framerate )    {	dev->writeBlock("\212MNG\r\n\032\n", 8);	struct {	    int width;	    int height;	    int framerate;	    int a,b,c;	    int profile;	} chunk;	chunk.width = htonl(size.width());	chunk.height = htonl(size.height());	chunk.framerate = htonl(framerate);	chunk.a=0;	chunk.b=0;	chunk.c=0;	chunk.profile= htonl(0x00000003);	png_write_chunk(png_ptr, (png_byte*)"MHDR", (png_byte*)&chunk, sizeof(chunk));    }    void writeMEND()    {	png_write_chunk(png_ptr, (png_byte*)"MEND", 0, 0);    }    void writeDEFI( const QPoint& offset, const QSize& size )    {	struct {	    ushort o;	    uchar s;	    uchar concrete;	    int x,y;	    int lc,rc,tc,bc;	} chunk;	chunk.o=0;	chunk.s=0;	chunk.concrete=1;	chunk.x=htonl(offset.x());	chunk.y=htonl(offset.y());	chunk.lc=0;	chunk.rc=0;	chunk.tc=htonl(INT_MAX);	chunk.bc=htonl(INT_MAX);	png_write_chunk(png_ptr, (png_byte*)"DEFI", (png_byte*)&chunk, sizeof(chunk));    }    void writeFRAM( const QSize& size )    {	struct {	    uchar mode;	    uchar n;	    uchar nu;	    uchar d;	    uchar t;	    uchar clip;	    uchar s;	    uchar deltatype;	    uint left;	    uint right;	    uint top;	    uint bottom;	} chunk;	chunk.mode=1;	chunk.n='a';	chunk.nu=0;	chunk.d=0;	chunk.clip=1;	chunk.t=0;	chunk.s=0;	chunk.deltatype=0;	chunk.left=0;	chunk.right=htonl(size.width());	chunk.top=0;	chunk.bottom=htonl(size.height());	png_write_chunk(png_ptr, (png_byte*)"FRAM", (png_byte*)&chunk, sizeof(chunk));    }    void writeMOVE( const QPoint& offset )    {	struct {	    uchar filler[3];	    uchar z[5];	    int x,y;	} chunk;	memset(chunk.z,0,5);	chunk.x=htonl(offset.x());	chunk.y=htonl(offset.y());	png_write_chunk(png_ptr, (png_byte*)"MOVE", ((png_byte*)&chunk)+3, sizeof(chunk)-3);    }    void setImage(const QImage& src)    {	if ( first ) {	    first = FALSE;	    writeMHDR(src.size(),framerate);	}	composeImage(src,QPoint(0,0));    }    bool canCompose() const { return TRUE; }    void composeImage(const QImage& src, const QPoint& offset)    {	writeMOVE(offset);	//writeFRAM(src.size());	writePNG(src);    }};QAnimationWriter::QAnimationWriter( const QString& filename, const char* format ){    if ( QCString(format) != "MNG" ) {	qWarning("Format \"%s\" not supported, only MNG", format);	dev = 0;	d = 0;    } else {	QFile *f = new QFile(filename);	f->open(IO_WriteOnly);	dev = f;	d = new QAnimationWriterMNG(dev);    }}bool QAnimationWriter::okay() const{    return dev && dev->status() == IO_Ok;}QAnimationWriter::~QAnimationWriter(){    delete d;    delete dev;}void QAnimationWriter::setFrameRate(int r){    if (d) d->setFrameRate(r);}void QAnimationWriter::appendFrame(const QImage& frm, const QPoint& offset){    QImage frame = frm.convertDepth(32);    const int alignx = 1;    if ( dev ) {	if ( prev.isNull() || !d->canCompose() ) {	    d->setImage(frame);	} else {	    bool done;	    int minx, maxx, miny, maxy;	    int w = frame.width();	    int h = frame.height();	    QRgb** jt = (QRgb**)frame.jumpTable();	    QRgb** pjt = (QRgb**)prev.jumpTable() + offset.y();	    // Find left edge of change	    done = FALSE;	    for (minx = 0; minx < w && !done; minx++) {		for (int ty = 0; ty < h; ty++) {		    if ( jt[ty][minx] != pjt[ty][minx+offset.x()] ) {			done = TRUE;			break;		    }		}	    }	    minx--;	    // Find right edge of change	    done = FALSE;	    for (maxx = w-1; maxx >= 0 && !done; maxx--) {		for (int ty = 0; ty < h; ty++) {		    if ( jt[ty][maxx] != pjt[ty][maxx+offset.x()] ) {			done = TRUE;			break;		    }		}	    }	    maxx++;	    // Find top edge of change	    done = FALSE;	    for (miny = 0; miny < h && !done; miny++) {		for (int tx = 0; tx < w; tx++) {		    if ( jt[miny][tx] != pjt[miny][tx+offset.x()] ) {			done = TRUE;			break;		    }		}	    }	    miny--;	    // Find right edge of change	    done = FALSE;	    for (maxy = h-1; maxy >= 0 && !done; maxy--) {		for (int tx = 0; tx < w; tx++) {		    if ( jt[maxy][tx] != pjt[maxy][tx+offset.x()] ) {			done = TRUE;			break;		    }		}	    }	    maxy++;	    if ( minx > maxx ) minx=maxx=0;	    if ( miny > maxy ) miny=maxy=0;	    if ( alignx > 1 ) {		minx -= minx % alignx;		maxx = maxx - maxx % alignx + alignx - 1;	    }	    int dw = maxx-minx+1;	    int dh = maxy-miny+1;	    QImage diff(dw, dh, 32);	    diff.setAlphaBuffer(TRUE);	    int x, y;	    for (y = 0; y < dh; y++) {		QRgb* li = (QRgb*)frame.scanLine(y+miny)+minx;		QRgb* lp = (QRgb*)prev.scanLine(y+miny+offset.y())+minx+offset.x();		QRgb* ld = (QRgb*)diff.scanLine(y);		if ( alignx ) {		    for (x = 0; x < dw; x+=alignx) {			int i;			for (i=0; i<alignx; i++) {			    if ( li[x+i] != lp[x+i] )				break;			}			if ( i == alignx ) {			    // All the same			    for (i=0; i<alignx; i++) {				ld[x+i] = qRgba(0,0,0,0);			    }			} else {			    // Some different			    for (i=0; i<alignx; i++) {				ld[x+i] = 0xff000000 | li[x+i];			    }			}		    }		} else {		    for (x = 0; x < dw; x++) {			if ( li[x] != lp[x] )			    ld[x] = 0xff000000 | li[x];			else			    ld[x] = qRgba(0,0,0,0);		    }		}	    }qDebug("%d,%d  %d,%d",minx,miny,offset.x(),offset.y());	    d->composeImage(diff,QPoint(minx,miny)+offset);	}	if ( prev.isNull() || prev.size() == frame.size() && offset == QPoint(0,0) ) {	    prev = frame;	} else {	    bitBlt(&prev,offset.x(),offset.y(),&frame,0,0,frame.width(),frame.height());	}    }}void QAnimationWriter::appendFrame(const QImage& frm){    appendFrame(frm,QPoint(0,0));}void QAnimationWriter::appendBlankFrame(){    QImage i(1,1,32);    i.setAlphaBuffer(TRUE);    i.fill(0);    d->composeImage(i,QPoint(0,0));}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品一二三区| 午夜在线电影亚洲一区| 色婷婷综合久久久久中文一区二区| 五月开心婷婷久久| 国产精品免费视频网站| 欧美一区二区成人| 91久久精品一区二区三区| 国产一区二区在线看| 亚洲一区二区偷拍精品| 欧美国产欧美综合| 日韩精品在线一区二区| 91黄色免费网站| 北岛玲一区二区三区四区| 国内精品写真在线观看| 首页亚洲欧美制服丝腿| 悠悠色在线精品| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 一本久久a久久精品亚洲| 精品写真视频在线观看| 性做久久久久久免费观看| 国产精品理论片| 久久久亚洲精品石原莉奈| 欧美一区二区三区的| 欧美午夜精品理论片a级按摩| 粉嫩一区二区三区在线看| 韩国午夜理伦三级不卡影院| 偷窥国产亚洲免费视频| 一区二区三区蜜桃| 自拍偷拍国产精品| 中文字幕在线观看不卡视频| 精品国产一区二区在线观看| 91精品蜜臀在线一区尤物| 欧美日韩国产天堂| 欧美日韩国产乱码电影| 欧美日韩精品系列| 欧美欧美欧美欧美| 欧美日韩在线播放一区| 欧美午夜精品久久久| 欧美日韩综合一区| 欧美三级中文字幕| 欧美久久久一区| 91精品国产综合久久精品app| 欧美日韩一区三区| 欧美日韩精品一区视频| 91精品国产综合久久久蜜臀图片 | 91精品国产综合久久久蜜臀图片 | 91激情五月电影| 欧美日韩中字一区| 欧美一区二区视频观看视频| 91麻豆精品国产91久久久资源速度 | 亚洲福利一区二区三区| 午夜精品福利久久久| 青青草国产精品亚洲专区无| 蜜臂av日日欢夜夜爽一区| 极品销魂美女一区二区三区| 国内成+人亚洲+欧美+综合在线| 国产精品77777竹菊影视小说| 成人免费毛片片v| 色偷偷久久一区二区三区| 欧美日韩在线综合| 精品国产伦一区二区三区观看体验| 欧美精品一区二区久久久 | 亚洲午夜三级在线| 婷婷久久综合九色国产成人 | 91黄视频在线| 日韩欧美一级二级三级 | 日产国产欧美视频一区精品| 热久久一区二区| 国产成人av电影在线观看| 东方欧美亚洲色图在线| 色成人在线视频| 日韩精品一区二区三区视频| 欧美国产视频在线| 亚洲大型综合色站| 国产精品一区二区免费不卡 | 免费看精品久久片| 国产成人免费在线观看不卡| 91麻豆文化传媒在线观看| 91精品国产一区二区三区香蕉| 久久精品一区二区三区av| 一区二区三区四区高清精品免费观看 | 成人av动漫在线| 欧美日本免费一区二区三区| 精品国产91久久久久久久妲己| 国产精品久久久久久久久免费桃花| 尤物视频一区二区| 国产乱码精品一区二区三| 欧美午夜片在线观看| 久久久99久久| 丝瓜av网站精品一区二区| 成人性生交大合| 欧美夫妻性生活| 国产精品成人免费精品自在线观看| 午夜精品久久久久久久99水蜜桃| 国产另类ts人妖一区二区| 欧美午夜在线一二页| 亚洲国产成人私人影院tom| 日韩专区在线视频| 色综合一区二区| 国产亚洲欧美色| 蜜桃久久久久久久| 91九色02白丝porn| 国产人伦精品一区二区| 日韩在线观看一区二区| 91丨九色丨蝌蚪丨老版| 精品久久人人做人人爰| 午夜久久久影院| 99精品热视频| 国产日韩av一区| 麻豆精品久久久| 欧美日韩亚洲综合一区二区三区| 中文字幕不卡的av| 国产精品亚洲一区二区三区妖精| 欧美日韩精品是欧美日韩精品| 中文字幕在线观看不卡| 国产电影一区在线| 久久伊99综合婷婷久久伊| 青青草原综合久久大伊人精品| 91久久精品一区二区三区| 日韩毛片在线免费观看| 成人午夜激情在线| 国产农村妇女毛片精品久久麻豆| 久久精品国产99国产精品| 69堂国产成人免费视频| 亚洲第一久久影院| 欧美中文字幕久久| 亚洲线精品一区二区三区八戒| 91在线视频观看| 亚洲色图色小说| 91老师国产黑色丝袜在线| 国产精品久久久久久久午夜片| 国产精品69毛片高清亚洲| 精品国产伦一区二区三区免费| 久久av中文字幕片| 精品久久久久香蕉网| 久草中文综合在线| 精品国产亚洲在线| 国产尤物一区二区| 国产女人18毛片水真多成人如厕| 国产一二精品视频| 中文天堂在线一区| 99久久伊人久久99| 中文字幕一区二区三区不卡| 成人午夜激情视频| 亚洲欧美激情在线| 欧美日韩三级在线| 免费精品视频在线| 久久久夜色精品亚洲| 成人免费观看视频| 亚洲精品国久久99热| 欧美亚洲国产bt| 日韩电影在线一区二区三区| 日韩欧美一级片| 丁香婷婷深情五月亚洲| 国产精品国产三级国产a| 色婷婷精品大在线视频| 亚洲福利视频一区| 精品国产乱码久久久久久老虎| 国产一区在线观看视频| 国产精品久久三区| 欧美日韩在线亚洲一区蜜芽| 麻豆精品国产传媒mv男同| 国产日韩高清在线| 在线视频欧美精品| 久久电影网电视剧免费观看| 国产午夜亚洲精品理论片色戒 | 亚洲乱码中文字幕| 6080yy午夜一二三区久久| 狠狠色丁香九九婷婷综合五月| 中文字幕一区在线观看视频| 欧美视频在线一区| 韩日精品视频一区| 亚洲三级小视频| 日韩欧美黄色影院| av电影天堂一区二区在线 | 亚洲6080在线| www久久精品| 在线观看国产一区二区| 精品一区二区综合| 亚洲综合在线视频| 久久众筹精品私拍模特| 色悠悠久久综合| 国产裸体歌舞团一区二区| 亚洲美女偷拍久久| 久久综合九色综合欧美就去吻| 一本色道久久综合亚洲91| 激情文学综合网| 亚洲成av人影院| 中文文精品字幕一区二区| 欧美日韩高清不卡| 99在线精品一区二区三区| 麻豆精品久久精品色综合| 亚洲激情五月婷婷| 国产农村妇女毛片精品久久麻豆| 欧美日韩国产三级| 色综合天天性综合| 国产成人精品影院| 精品亚洲免费视频| 午夜精品久久久久影视| 亚洲免费观看高清在线观看|