资源简介

本程序是我学校里数据结构课程设计的一道题目,水平有限还请见谅!

资源截图

代码片段和文件信息

#include “cellsshader.h“
#include “ui_mainwindow.h“
#include “colorselector.h“

#include 
#include 
#include 
#include 

const QPoint CellsShader::offset[4] = {
    QPoint(0-1)
    QPoint(01)
    QPoint(-10)
    QPoint(10)
};

CellsShader::CellsShader(Ui::MainWindow* _ui) :
    ui(_ui)width(0)height(0) {}

QRgb CellsShader::pixel(QPoint p) const
{
    const QRgb* line = (const QRgb*)image.scanLine(p.y());
    return line[p.x()];
}

void CellsShader::setPixel(QPoint pQRgb r)
{
    QRgb* line = (QRgb*)image.scanLine(p.y());
    line[p.x()] = r;
}

bool CellsShader::isInRange(QPoint p) const
{
    int x = p.x()y = p.y();
    return x >= 0 && x < width && y >= 0 && y < height;
}

void CellsShader::pause() const
{
    QEventLoop loop;
    QTimer::singleShot(1000&loopSLOT(quit()));
    loop.exec();
}

void CellsShader::drawCellAttribute(int cellCountint pixNumQRgb color)
{
    ui->idLabel->setText(QString::number(cellCount10));
    ui->pixNumLabel->setText(QString::number(pixNum10));
    ui->cellsframe2->drawColor(color);
}

void CellsShader::drawCellImage()
{
    ui->cellsframe1->drawImage(image);
}

void CellsShader::fillHole()
{
    for(int i = 0;i < width;i++)
    {
        QPoint pUp(i0);
        if(pixel(pUp) == BLACK)
            floodFill(pUpBLACKMIDDLE);

        QPoint pDown(iheight - 1);
        if(pixel(pDown) == BLACK)
            floodFill(pDownBLACKMIDDLE);
    }

    for(int j = 0;j < height;j++)
    {
        QPoint pLeft(0j);
        if(pixel(pLeft) == BLACK)
            floodFill(pLeftBLACKMIDDLE);

        QPoint pRight(width - 1j);
        if(pixel(pRight) == BLACK)
            floodFill(pRightBLACKMIDDLE);
    }

    for(int i = 0;i < width;i++)
    {
        for(int j = 0;j < height;j++)
        {
            QPoint p(ij);
            QRgb r = pixel(p);

            if(r == MIDDLE)
                setPixel(pBLACK);
            else if(r == BLACK)
                setPixel(pWHITE);
        }
    }

}

int CellsShader::floodFill(QPoint seedQRgb seedColorQRgb fillColor)
{
    setPixel(seedfillColor);
    QVector v = {seed};
    int count = 0;

    //漫水填充,以 QPoint(ij) 为种子点,广度优先来搜寻4邻域内的像素
    while(count != v.size())
    {
        QPoint p1 = v[count];

        for(int i = 0;i<4;i++)
        {
            QPoint p2 = p1 + offset[i];

            if(isInRange(p2) && pixel(p2) == seedColor)
            {
                setPixel(p2fillColor);
                v.push_back(p2);
            }
        }

        count++;
    }

    return count;
}

void CellsShader::load(const QString& fileName)
{
    image.load(fileName); //载入图片
    if(image.isNull())
        throw QString(“无法载入图片!“);

    image = image.convertToFormat(QImage::Format_RGB32); //转为32位图片
    width = image.width();
    height = image.height();

    drawCellImage();

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-12-27 11:09  课程设计\
     目录           0  2017-12-22 09:50  课程设计\可执行程序\
     目录           0  2017-12-22 09:55  课程设计\可执行程序\cellsImage\
     文件        7258  2017-12-26 20:21  课程设计\可执行程序\cellsImage\image1.png
     文件       34622  2017-12-21 21:46  课程设计\可执行程序\cellsImage\image2.bmp
     文件       62976  2017-12-21 22:25  课程设计\可执行程序\ColourCells.exe
     文件     3466856  2014-03-11 18:54  课程设计\可执行程序\D3Dcompiler_47.dll
     目录           0  2017-12-22 09:50  课程设计\可执行程序\iconengines\
     文件       43008  2017-10-02 20:09  课程设计\可执行程序\iconengines\qsvgicon.dll
     目录           0  2017-12-22 09:50  课程设计\可执行程序\imageformats\
     文件       33792  2017-10-02 19:26  课程设计\可执行程序\imageformats\qgif.dll
     文件       46592  2017-10-02 20:05  课程设计\可执行程序\imageformats\qicns.dll
     文件       36352  2017-10-02 19:26  课程设计\可执行程序\imageformats\qico.dll
     文件      247808  2017-10-02 19:26  课程设计\可执行程序\imageformats\qjpeg.dll
     文件       27648  2017-10-02 20:09  课程设计\可执行程序\imageformats\qsvg.dll
     文件       26624  2017-10-02 20:04  课程设计\可执行程序\imageformats\qtga.dll
     文件      448000  2017-10-02 20:04  课程设计\可执行程序\imageformats\qtiff.dll
     文件       25600  2017-10-02 20:05  课程设计\可执行程序\imageformats\qwbmp.dll
     文件      449536  2017-10-02 20:05  课程设计\可执行程序\imageformats\qwebp.dll
     文件       22016  2017-10-02 19:12  课程设计\可执行程序\libEGL.dll
     文件      120334  2015-12-29 06:25  课程设计\可执行程序\libgcc_s_dw2-1.dll
     文件     2807296  2017-10-02 19:11  课程设计\可执行程序\libGLESV2.dll
     文件     1540622  2015-12-29 06:25  课程设计\可执行程序\libstdc++-6.dll
     文件       79360  2015-12-29 06:25  课程设计\可执行程序\libwinpthread-1.dll
     文件    15995904  2016-06-14 21:08  课程设计\可执行程序\opengl32sw.dll
     目录           0  2017-12-22 09:50  课程设计\可执行程序\platforms\
     文件     1762304  2017-10-02 19:27  课程设计\可执行程序\platforms\qwindows.dll
     文件     6097408  2017-12-22 09:50  课程设计\可执行程序\Qt5Core.dll
     文件     6205440  2017-10-02 19:17  课程设计\可执行程序\Qt5Gui.dll
     文件      359936  2017-10-02 20:09  课程设计\可执行程序\Qt5Svg.dll
     文件     6355456  2017-10-02 19:22  课程设计\可执行程序\Qt5Widgets.dll
............此处省略89个文件信息

评论

共有 条评论