• 3237阅读
  • 0回复

[提问]Qt对jpg图片进行混沌处理 [复制链接]

上一主题 下一主题
离线zhangshufan8
 

只看楼主 倒序阅读 楼主  发表于: 2016-04-30
想用Qt对图片进行处理,使用混沌算法,对bmp和png两种格式可以正常使用(即可以加密和正常恢复),但在对jpg格式的图片进行加密处理后却无法正常恢复原图,求各位大神帮帮忙。
加密代码如下
  1. QString fileName = QFileDialog::getOpenFileName(this, "打开文件", "", "");
  2.     if (fileName.isEmpty())
  3.         return;
  4.     QImage image(fileName);
  5.     int chaos;
  6.     double a;
  7.     double x;
  8.     double keys[][2] = {{4, 0.6}, {3.999, 0.8}, {3.7, 0.7}, {3.888, 0.6}};
  9.     for (int kNum = 0; kNum < 4; ++kNum)
  10.     {
  11.         a = keys[kNum][0];
  12.         x = keys[kNum][1];
  13.         for (int c = 0; c < 1000; ++c)
  14.             x = a*x*(1-x);
  15.         for (int j = 0; j < image.height(); ++j)
  16.         {
  17.             for (int i = 0; i < image.width(); ++i)
  18.             {
  19.                 chaos = 0;
  20.                 for (int c = 0; c < 8; ++c)
  21.                 {
  22.                     x = a*x*(1-x);
  23.                     if (x >= a/6)
  24.                         chaos = ((chaos << 1) | 1);
  25.                     else
  26.                         chaos = ((chaos << 1) | 0);
  27.                 }
  28.                 QColor color(image.pixel(i, j));
  29.                 color.setRed(color.red() ^ chaos);
  30.                 color.setGreen(color.green() ^ chaos);
  31.                 color.setBlue(color.blue() ^ chaos);
  32.                 image.setPixel(i, j, color.rgb());
  33.             }
  34.         }
  35.     }
  36.     QString saveName = QFileDialog::getSaveFileName(this, "保存文件", "", "");
  37.     if (saveName.isEmpty())
  38.         return;
  39.     image.save(saveName, fileName.section('.', -1).toStdString().c_str(), 100);


快速回复
限100 字节
 
上一个 下一个