[libqnono] nonogram reading and writing from/to stream
This commit is contained in:
parent
082dd261bc
commit
efe7150dc7
@ -37,7 +37,7 @@ namespace libqnono {
|
|||||||
}
|
}
|
||||||
|
|
||||||
CNonogram::CNonogram(QDataStream & stream) : m_Data(NULL), m_MaximumNumberCount(0) {
|
CNonogram::CNonogram(QDataStream & stream) : m_Data(NULL), m_MaximumNumberCount(0) {
|
||||||
loadFromStream(stream);
|
readFromStream(stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
CNonogram::~CNonogram() {
|
CNonogram::~CNonogram() {
|
||||||
@ -55,19 +55,98 @@ namespace libqnono {
|
|||||||
m_Data[ix][iy] = !(image.pixel(ix, iy) & 0x00FFFFFF);
|
m_Data[ix][iy] = !(image.pixel(ix, iy) & 0x00FFFFFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CNonogram::loadFromStream(QDataStream & stream) {
|
bool CNonogram::readFromStream(QDataStream & stream) {
|
||||||
qDebug("loading picture from stream...");
|
unsigned char data;
|
||||||
stream >> m_Name; qDebug("m_Name = %s", qPrintable(m_Name));
|
QString stringBuffer;
|
||||||
int imageWidth, imageHeight;
|
qint32 intBuffer;
|
||||||
stream >> imageWidth; qDebug("imageWidth = %i", imageWidth);
|
QSize sizeBuffer;
|
||||||
stream >> imageHeight; qDebug("imageHeight = %i", imageHeight);
|
|
||||||
resize(QSize(imageWidth, imageHeight));
|
|
||||||
|
|
||||||
stream >> m_Timeout;
|
stream >> stringBuffer; qDebug("reading image: %s", qPrintable(stringBuffer));
|
||||||
|
if (stream.atEnd()) {
|
||||||
|
qCritical("invalid nonogram");
|
||||||
|
cleanup();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
for (int iy = 0; iy < m_Size.height(); iy++)
|
stream >> intBuffer; qDebug("width %i", intBuffer);
|
||||||
for (int ix = 0; ix < m_Size.width(); ix++)
|
if (stream.atEnd()) {
|
||||||
stream >> m_Data[ix][iy];
|
qCritical("invalid nonogram");
|
||||||
|
cleanup();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
sizeBuffer.setWidth(intBuffer);
|
||||||
|
|
||||||
|
stream >> intBuffer; qDebug("height %i", intBuffer);
|
||||||
|
if (stream.atEnd()) {
|
||||||
|
qCritical("invalid nonogram");
|
||||||
|
cleanup();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
sizeBuffer.setHeight(intBuffer);
|
||||||
|
|
||||||
|
m_Name = stringBuffer;
|
||||||
|
|
||||||
|
stream >> intBuffer; qDebug("timeout %i", intBuffer);
|
||||||
|
if (stream.atEnd()) {
|
||||||
|
qCritical("invalid nonogram");
|
||||||
|
cleanup();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_Timeout = intBuffer;
|
||||||
|
|
||||||
|
resize(sizeBuffer);
|
||||||
|
|
||||||
|
for (int x = 0; x < sizeBuffer.width(); x++) {
|
||||||
|
int y = 0;
|
||||||
|
|
||||||
|
while (y < sizeBuffer.height()) {
|
||||||
|
if (stream.atEnd()) {
|
||||||
|
qCritical("invalid nonogram");
|
||||||
|
cleanup();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
stream.readRawData((char *)&data, 1);
|
||||||
|
|
||||||
|
int b;
|
||||||
|
for (b = 0; b < 8; b++) {
|
||||||
|
if (y < sizeBuffer.height())
|
||||||
|
m_Data[x][y] = (bool)(data & 0x80);
|
||||||
|
data = data << 1;
|
||||||
|
y++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CNonogram::writeToStream(QDataStream & stream) {
|
||||||
|
stream << m_Name;
|
||||||
|
stream << qint32(m_Size.width());
|
||||||
|
stream << qint32(m_Size.height());
|
||||||
|
stream << qint32(m_Timeout);
|
||||||
|
|
||||||
|
unsigned char data;
|
||||||
|
|
||||||
|
for (int x = 0; x < m_Size.width(); x++) {
|
||||||
|
data = 0x00;
|
||||||
|
int y = 0;
|
||||||
|
while (y < m_Size.height()) {
|
||||||
|
int b;
|
||||||
|
for (b = 0; b < 8; b++) {
|
||||||
|
data = data << 1;
|
||||||
|
if (y < m_Size.height() && m_Data[x][y])
|
||||||
|
data |= 0x01;
|
||||||
|
y++;
|
||||||
|
}
|
||||||
|
|
||||||
|
stream.writeRawData((char *)&data, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CNonogram::resize(QSize size) {
|
void CNonogram::resize(QSize size) {
|
||||||
@ -155,21 +234,12 @@ namespace libqnono {
|
|||||||
}
|
}
|
||||||
|
|
||||||
QDataStream & operator<<(QDataStream & stream, CNonogram & nonogram) {
|
QDataStream & operator<<(QDataStream & stream, CNonogram & nonogram) {
|
||||||
stream << nonogram.name();
|
nonogram.writeToStream(stream);
|
||||||
stream << nonogram.width();
|
|
||||||
stream << nonogram.height();
|
|
||||||
stream << nonogram.timeout();
|
|
||||||
|
|
||||||
for (int iy = 0; iy < nonogram.height(); iy++)
|
|
||||||
for (int ix = 0; ix < nonogram.width(); ix++)
|
|
||||||
stream << nonogram.pixel(ix, iy);
|
|
||||||
|
|
||||||
return stream;
|
return stream;
|
||||||
}
|
}
|
||||||
|
|
||||||
QDataStream & operator>>(QDataStream & stream, CNonogram & nonogram) {
|
QDataStream & operator>>(QDataStream & stream, CNonogram & nonogram) {
|
||||||
nonogram.loadFromStream(stream);
|
nonogram.readFromStream(stream);
|
||||||
|
|
||||||
return stream;
|
return stream;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -38,9 +38,11 @@ namespace libqnono {
|
|||||||
~CNonogram();
|
~CNonogram();
|
||||||
|
|
||||||
void loadFromImage(QImage & image);
|
void loadFromImage(QImage & image);
|
||||||
void loadFromStream(QDataStream & stream);
|
|
||||||
void resize(QSize size);
|
void resize(QSize size);
|
||||||
|
|
||||||
|
bool readFromStream(QDataStream & stream);
|
||||||
|
void writeToStream(QDataStream & stream);
|
||||||
|
|
||||||
inline QString name() const { return m_Name; }
|
inline QString name() const { return m_Name; }
|
||||||
inline void setName(QString value) { m_Name = value; }
|
inline void setName(QString value) { m_Name = value; }
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user