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

📄 image.cpp

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.10平台上编译为嵌入式图形界面操作系统。
💻 CPP
字号:
/************************************************************************ Copyright (C) 2000-2005 Trolltech AS.  All rights reserved.**** This file is part of the Qtopia Environment.** ** This program is free software; you can redistribute it and/or modify it** under the terms of the GNU General Public License as published by the** Free Software Foundation; either version 2 of the License, or (at your** option) any later version.** ** A copy of the GNU GPL license version 2 is included in this package as ** LICENSE.GPL.**** This program 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 General Public License for more details.**** In addition, as a special exception Trolltech gives permission to link** the code of this program with Qtopia applications copyrighted, developed** and distributed by Trolltech under the terms of the Qtopia Personal Use** License Agreement. You must comply with the GNU General Public License** in all respects for all of the code used other than the applications** licensed under the Qtopia Personal Use License Agreement. If you modify** this file, you may extend this exception to your version of the file,** but you are not obligated to do so. If you do not wish to do so, delete** this exception statement from your version.** ** 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 "image.h"#include <qfileinfo.h>#include <qimage.h>#include <qstring.h>/*!   Returns an image created by loading the \a filename,   and scalining it, preserving aspect ratio, to fit in   \a width by \a height pixels.   First availability: Qtopia 2.0*/QImage Image::loadScaled(const QString &filename, const int width, const int height, ScaleMode mode){    QImageIO    iio;    QString     param;    int         w = width;    int         h = height;    if (width == 0 || height == 0)	return QImage();    iio.setFileName(filename);    //    // Try and load and scale the image in one hit.    //    param.sprintf("GetHeaderInformation");    iio.setParameters(param);    iio.read();    //    // If we don't have bits(), read() understands parameters,    // and we can setup for fast reading.  Otherwise, take the    // performance hit and do things slowly.    //    if (!iio.image().bits()) {	if ((iio.image().width() < w) && (iio.image().height() < h)) {	    param.sprintf("%s", "Fast"); // No Tr	} else {	    int shrink_factor=1;	    QString smode;	    switch (mode) {		case ScaleMin:		    smode = "ScaleMin";		    shrink_factor = QMAX(iio.image().width() / w,			iio.image().height() / h);		    break;		case ScaleMax:		    smode = "ScaleMax";		    shrink_factor = QMIN(iio.image().width() / w,			iio.image().height() / h);		    break;		case ScaleFree:		    smode = "ScaleFree";		    shrink_factor = QMIN(iio.image().width() / w,			iio.image().height() / h);		    break;	    }	    param.sprintf("Scale( %i, %i, %s )%s, Shrink( %i )", // No tr		    w, h, smode.latin1(),		    ", Fast", shrink_factor); // No tr	}        iio.setParameters(param);        iio.read();        return iio.image();    }    if((iio.image().width() > w) || (iio.image().height() > h))    {	QSize s = aspectScaleSize(iio.image().width(), iio.image().height(), w, h, mode);	return iio.image().smoothScale(s.width(), s.height());    }        return iio.image();}//// Returns new size of image, scaled to target_width and target_height,// whilst preserving aspect ratio.  Useful when it's not possible to// scale an image prior to using it (eg. using RichText).  Should be in// global image utils.//// NOTE// - expensive for images whose drivers do not allow us to retrieve//   parameters without reading the entire image.  Currently (20030930)//   only the jpeg driver allows parameter reading.//QSize Image::loadScaledImageSize(const QString &filename, int target_width, int target_height, int maxscale, ScaleMode mode){    QImageIO    iio;    iio.setFileName(filename);    iio.setParameters("GetHeaderInformation");    iio.read();    int w = iio.image().width();    int h = iio.image().height();    //    // Scaling up small pictures can be very ugly.    // Leave them alone if they are too small.    //    if (maxscale && w*maxscale < target_width && h*maxscale < target_height)	return QSize(w*maxscale, h*maxscale);    return aspectScaleSize(w, h, target_width, target_height, mode);}// Load an image to be used as a portrait. Force its height to height, // scale width to new height, and crop the width if it's still > width// XXX : Should be using integer mathQImage Image::loadPortrait(const QString &filename, const int width, const int height){    QImageIO    iio;    QString     param;    int         w = width;    int         h = height;    if (width == 0 || height == 0)	return QImage();    iio.setFileName(filename);    //    // Try and load and scale the image in one hit.    //    param.sprintf("GetHeaderInformation");    iio.setParameters(param);    iio.read();    //    // If we don't have bits(), read() understands parameters,    // and we can setup for fast reading.  Otherwise, take the    // performance hit and do things slowly.    //    if (!iio.image().bits())     {	w = (int)((double)iio.image().width() / (double)(iio.image().height()) * (double)height);	param.sprintf("Scale( %i, %i, ScaleFree )%s", // No tr		w, h,		", Fast"		); // No tr        iio.setParameters(param);        iio.read();	if( w > width )	{	    int x = (int)((double)(w-width) / 2);	    QRect r( x, 0, width, height );	    return iio.image().copy( r );	}	else	    return iio.image();    }     else     {	//scale width to the new height	w = (int)((double)iio.image().width() / (double)(iio.image().height()) * (double)height);	if( w > width )	{	    int x = (int)((double)(w-width) / 2);	    QRect r( x, 0, width, height );	    return iio.image().smoothScale(w, h).copy(r);	}	else	    return iio.image().smoothScale(w, h);    }}//// Return (w x h) scaled to (target_width x target_height) with aspect// ratio preserved.//QSizeImage::aspectScaleSize(const int w, const int h, const int target_width,    const int target_height, ScaleMode mode){    QSize s;    if ( mode == ScaleFree ) {	s = QSize(target_width, target_height);    } else {	bool useHeight = TRUE;	int rw = target_height * w / h;	if ( mode == ScaleMin ) {	    useHeight = ( rw <= target_width );	} else { // mode == ScaleMax	    useHeight = ( rw >= target_width );	}	if ( useHeight ) {	    s = QSize(rw, target_height);	} else {	    s = QSize(target_width, target_width * h / w);	}    }    return s;}

⌨️ 快捷键说明

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