費了好半天勁先翻譯這一點。還有好多地方不明白。先弄明白這一點。繼續以後的翻譯。
這一篇文章我們將討論不同的技術和算法來修改圖像使用Qt.但是在這之前我們繼續你必須知道一些原則處理圖片。
這裏主要有兩種類代表一個圖片在qt, QImage 和QPixmap;我們還可以使用QBitmap來處理單色圖片。和QPicture 和QPainter繪圖命令。
當我們畫圖片在一個屏幕上時QPixmap我們建議使用。因爲他是很快速地一種方式去畫圖片,QPixmap的問題是我們不能用單個像素去讀它和修改它
QImage 是最快比QPixmap 在IO操作和給我們去訪問單個像素信息。這個類,我們將在本文中編輯圖片。
如果你管理大圖片,喜歡用相機拍照。建議使用更精簡的圖來展示在屏幕上。除非我們想讓用戶來變焦這個圖片。這有兩種方式來導處圖片從一個文件和縮小它。
導入一張圖片用QImage 或者QPixmap 和調整後;
QImage image("sample.png");
image = image.scaled(width,
height);---這裏的width和height你可以換成縮放後的數值。
使用QImageReader 設置目標尺寸之後導入圖片進一Qimage.QImageReader不能加載一個QPximap但是很容易創建一個QPximap從一個來自己QIage用一個靜態的方法。
QPximap::fromImage(QImage img).這個方法是最快的和你不需要內存必須加載完整
大小圖片。
QImageReader imgReader("sample.png"); imgReader.setScaledSize(QSize(width, height)); QImage * image; imgReader.read(image);
每一個圖像是由像素,每個像素是由3個顏色通道:紅、綠、藍、和一個alpha通道,包含透明度值(JPG和其他圖像格式不支持透明)。這些渠道有0到255之間的值和黑色顏色形成當這些3顏色通道0而白色是代表當的值是2553通道。來表示一種顏色在本文中,我們將把它作爲RGB(紅、綠、藍)被紅色、綠色和藍色的價值3通道。
QImage * MainWindow::greyScale(QImage * origin){ QImage * newImage =new QImage(origin->width(), origin->height(), QImage::Format_ARGB32); QRgb * line; for(int y =0; y<newImage->height(); y++){ QRgb * line =(QRgb *)origin->scanLine(y); for(int x =0; x<newImage->width(); x++){ int average =(qRed(line[x])+ qGreen(line[x])+ qRed(line[x]))/3; newImage->setPixel(x,y, qRgb(average, average, average)); } } return newImage; }