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

📄 framebuffer.cpp

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.7平台上编译为嵌入式图形界面操作系统。
💻 CPP
字号:
/************************************************************************ Copyright (C) 2000-2002 Trolltech AS.  All rights reserved.**** This file is part of the Qtopia Environment.**** This file may be distributed and/or modified under the terms of the** GNU General Public License version 2 as published by the Free Software** Foundation and appearing in the file LICENSE.GPL included in the** packaging of this file.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.**** See http://www.trolltech.com/gpl/ for GPL licensing information.**** Contact info@trolltech.com if any conditions of this licensing are** not clear to you.************************************************************************/#include <qpixmap.h>#include "framebuffer.h"FrameBuffer::FrameBuffer() :x(0), y(0), w(0), h(0), bits(0), lineStep(0){    jt = new uchar*[1];}FrameBuffer::~FrameBuffer(){    delete []jt;}void FrameBuffer::create( uchar *b, int ls, int x1, int y1, int width, int height ){    if ( bits == b && ls == lineStep && x == x1 && y == y1 && w == width && h == height )	return;    delete []jt;    jt = new uchar*[height];    x = x1;    y = y1;    bits = b;    lineStep = ls;    w = width;    h = height;    uchar *fp = bits + lineStep * y + QPixmap::defaultDepth() * x / 8;    for ( int i = 0; i < h; i++, fp += lineStep ) 	jt[i] = fp;}uchar **FrameBuffer::jumpTable(){    return jt;}int FrameBuffer::width(){    return w;}int FrameBuffer::height(){    return h;}template<class T>static inline void rotateLoopTemplate(        uchar *src, int srcBytesPerLine, uchar *dst, int dstBytesPerLine,        int width, int height, bool rotateDirection ){    int dstXAdd = 0;    int dstYAdd = 0;    int dstXOfs = 0;    int dstYOfs = 0;    int srcYAdd = srcBytesPerLine - width * sizeof(T);    if ( rotateDirection ) {            dstXOfs = 0;            dstYOfs = width - 1;            dstXAdd = -dstBytesPerLine;            dstYAdd = 1 * sizeof(T) + width * dstBytesPerLine;    } else {            dstXOfs = height - 1;            dstYOfs = 0;            dstXAdd = dstBytesPerLine;            dstYAdd = -1 * sizeof(T) - width * dstBytesPerLine;    }    T *dstPtr = (T *)(dst + dstYOfs * dstBytesPerLine) + dstXOfs;    T *srcPtr = (T *)src;    for ( int y = 0; y < height; y++ ) {        for ( int x = 0; x < width; x++ ) {            *dstPtr = *srcPtr++;            dstPtr = (T *)((uchar*)dstPtr + dstXAdd); // add dstXAdd number of bytes        }        srcPtr = (T *)((uchar*)srcPtr + srcYAdd); // add srcYAdd number of bytes        dstPtr = (T *)((uchar*)dstPtr + dstYAdd); // add dstYAdd number of bytes    }}void FrameBuffer::rotateToBuffer( FrameBuffer *dst, int dstX, int dstY, int srcX, int srcY, int w, int h, bool direction ){    uchar *srcPtr = jt[srcY] + QPixmap::defaultDepth() * srcX / 8;    uchar *dstPtr = dst->jt[dstY] + QPixmap::defaultDepth() * dstX / 8;    // Optimized image rotation code for nice bit depths    switch ( QPixmap::defaultDepth() ) {	case 16:	    rotateLoopTemplate<ushort>( srcPtr, lineStep, dstPtr, dst->lineStep, w, h, direction );	    break;	case 32:	    rotateLoopTemplate<uint>( srcPtr, lineStep, dstPtr, dst->lineStep, w, h, direction );	    break;    }}

⌨️ 快捷键说明

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