bool JPEGMultiProcessServer::isEqualPiece(constQRect&rect,constQRect&oldrect){
const uchar *nNewPixelPtr = NULL;
const uchar *nOldPixelPtr = NULL;
bool ret = true;
if(mImage==NULL)
return true;
if(mOldImage==NULL)
return false;
if(mOldImage->isNull()||mImage->isNull()) {
dmsg_err("mOldImage or mImage is NULL");
return false;
}
QImage rectImage = mImage->copy(rect);
QImage rectOldImage = mOldImage->copy(oldrect);
//方案一 比较图片所有数据,内存块数据操作
// for(int i=0;i<rect.height();i++)
// {
// nNewPixelPtr = mImage->bits()+mImage->bytesPerLine()*(rect.y()+i)+
// rect.x()*mImage->depth()/8;
// nOldPixelPtr = mOldImage->bits()+mOldImage->bytesPerLine()*(rect.y()+i)+
// rect.x()*mOldImage->depth()/8;
// //ret = false;
// if(memcmp(nNewPixelPtr,nOldPixelPtr,rect.width()*mImage->depth()/8)!=0)
// {
// ret = false;
// break;
// }
// }
//方案二 比较图片像素颜色
//QPixmap ScreenPicture = ScreenPicture.fromImage(rectImage);
// QRgb col;
// QRgb oldcol;
// for(int i =0;i<rectImage.height();++i)
// for(int j=0;j<rectImage.width();++j)
// {
// col = rectImage.pixel(j,i);
// oldcol = rectOldImage.pixel(j,i);
// if(col != oldcol)
// return false;
// }
//方案三 比较图片数据,先将图片二进制数据转换为base64编码
QByteArray picturedata;
QBuffer buffer(&picturedata);
buffer.open(QIODevice::ReadWrite);
rectImage.save(&buffer,"JPG");
if(buffer.isOpen())
buffer.close();
QByteArray firstmap = picturedata.toBase64();
QString fmap = firstmap;
QByteArray oldpicturedata;
QBuffer buffer1(&oldpicturedata);
buffer.open(QIODevice::ReadWrite);
rectOldImage.save(&buffer1,"JPG");
if(buffer.isOpen())
buffer.close();
QByteArray secondmap = oldpicturedata.toBase64();
QString smap = secondmap;
if(QString::compare(fmap ,smap)!=0)
return false;
return ret;
}