• 10648阅读
  • 6回复

怎么样用Qt代码写类似这样一个程序?“C# 把图片转换成字符串存入.txt文件中,并从.txt中读出生成图片” [复制链接]

上一主题 下一主题
离线ted522
 
只看楼主 正序阅读 楼主  发表于: 2010-07-26
我不太熟悉QT的那些函数,糊弄了好久都没有写出“图片转换成字符串存入.txt文件中,并从.txt中读出生成图片”的代码,

有没有朋友指点一下,怎么用QT代码来写出这个功能的一段程序呢,拜谢。

1、任何文件在计算机中是以二进制的形式储存,以图片为例,我们可以考虑把图片转换成字符串并存入.txt文件中

public void GetImage()
{
            Stream s = File.Open(MapPath("33.jpg"), FileMode.Open);
            int leng = 0;
            if (s.Length < Int32.MaxValue)
                leng = (int)s.Length;
            byte[] by = new byte[leng];
            s.Read(by, 0, leng);//把图片读到字节数组中
            s.Close();

            string str = Convert.ToBase64String(by);//把字节数组转换成字符串
            StreamWriter sw = File.CreateText(MapPath("11.txt"));//存入11.txt文件
            sw.Write(str);
            sw.Close();
            sw.Dispose();

}

//把字符串还原成图片

        public void CreateImg()
        {
            StreamReader sr = new StreamReader(MapPath("11.txt"));
            string s = sr.ReadToEnd();
            sr.Close();
            byte[] buf = Convert.FromBase64String(s);//把字符串读到字节数组中

            MemoryStream ms = new MemoryStream(buf);
            System.Drawing.Image img = System.Drawing.Image.FromStream(ms);
            img.Save(MapPath("12.jpg"), System.Drawing.Imaging.ImageFormat.Jpeg);
            ms.Close();
            ms.Dispose();
        }



离线dbzhang800

只看该作者 6楼 发表于: 2010-07-28
Re:Re:Re:怎么样用Qt代码写类似这样一个程序?“C# 把图片转换成字符串存入.txt文件中,并从.txt中读出 ..
引用第4楼sbtree于2010-07-26 21:11发表的 Re:Re:怎么样用Qt代码写类似这样一个程序?“C# 把图片转换成字符串存入.txt文件中,并从.txt中读出生成 .. :
这里想问一个问题,为什么要做base64转化?使用64Bit,所有信息就都能以可见字符形式表达出来吗?如果不是基于这个原因,理论上讲只要有一个算法,能把每一个字节都转化成可见字符,并可以逆向转化不就可以了吗?


你说的是对的,但做 base64 转化,是楼主的要求。
离线ted522
只看该作者 5楼 发表于: 2010-07-28
Re:怎么样用Qt代码写类似这样一个程序?“C# 把图片转换成字符串存入.txt文件中,并从.txt中读出生成图 ..
谢谢,已经解决了,可以参考这个程序
#include <QCoreApplication>
#include <QImage>
#include <QFile>
#include <QByteArray>
#include <QBuffer>


int main(int argc, char *argv[])
{
      QCoreApplication app(argc, argv);
      
      QImage image("test.png");
      QByteArray ba;
      QBuffer buf(&ba);
      image.save(&buf, "BMP");
      
      QByteArray compressed = qCompress(ba, 1); // better just open file with QFile, load data, compress and toHex?
      QByteArray hexed = compressed.toHex();
      // save to a file
      QString str(hexed);
      QFile f("test.hex");
      if (f.exists())
          f.remove();
      if (f.open(QFile::WriteOnly))
      {
          f.write(str.toLatin1()); // holds only 0..f nothing special.
      }
      else
          qDebug("failed to open file \"test.hex\"");
      f.close();
      ////----------
      if (f.open(QFile::ReadOnly))
      {
          QByteArray read = f.readAll();
          f.close();
          QString rStr = QString::fromLatin1(read.data(), read.size());
          if (rStr != str)
              qDebug("Writed and read two different hexed strings.");
          QByteArray readCompressed = QByteArray::fromHex(rStr.toAscii());
          if (readCompressed != compressed)
              qDebug("bytes before hexing and dehexing _is_ different.");
          QByteArray readDecompressed = qUncompress(readCompressed);
          if (readDecompressed != ba)
              qDebug("bytes before and after compressions are different.");
          QImage readImg;
          //QBuffer readBuf(&readDecompressed);
          readImg.loadFromData(readDecompressed);
          if (readImg.isNull())
              qDebug("The image is null. Something failed.");
          readImg.save("test.bmp");
      }
      else
          qDebug("failed to open test.hex file for reading");
      return 0;
}
离线sbtree
只看该作者 4楼 发表于: 2010-07-26
Re:Re:怎么样用Qt代码写类似这样一个程序?“C# 把图片转换成字符串存入.txt文件中,并从.txt中读出生成 ..
引用第2楼dbzhang800于2010-07-26 16:20发表的 Re:怎么样用Qt代码写类似这样一个程序?“C# 把图片转换成字符串存入.txt文件中,并从.txt中读出生成图 .. :
打开你的图片文件,读进QByteArray a,将a转成 base64的 QByteArray,写入另一个所谓的文本文件
然后反过来在操作一次。
仅仅涉及两个最基本的操作:1.读、写文件 2. base64转化。
.......

这里想问一个问题,为什么要做base64转化?使用64Bit,所有信息就都能以可见字符形式表达出来吗?如果不是基于这个原因,理论上讲只要有一个算法,能把每一个字节都转化成可见字符,并可以逆向转化不就可以了吗?
windows 7 + VC++2008 + Qt4.5.2
离线yj_yulin

只看该作者 3楼 发表于: 2010-07-26
Re:怎么样用Qt代码写类似这样一个程序?“C# 把图片转换成字符串存入.txt文件中,并从.txt中读出生成图 ..
最直接的应该是把c#的代码翻译一下为qt的即可.
离线dbzhang800

只看该作者 2楼 发表于: 2010-07-26
Re:怎么样用Qt代码写类似这样一个程序?“C# 把图片转换成字符串存入.txt文件中,并从.txt中读出生成图 ..
打开你的图片文件,读进QByteArray a,将a转成 base64的 QByteArray,写入另一个所谓的文本文件

然后反过来在操作一次。

仅仅涉及两个最基本的操作:1.读、写文件 2. base64转化。
而这两个又基本都是现成的

如果上面你给出的C#程序你清楚是怎么回事,用Qt应该没任何问题。
离线numen

只看该作者 1楼 发表于: 2010-07-26
Re:怎么样用Qt代码写类似这样一个程序?“C# 把图片转换成字符串存入.txt文件中,并从.txt中读出生成图 ..
qrc 资源文件啊
欢迎访问我的blog:
http://www.cnblogs.com/baizx
快速回复
限100 字节
 
上一个 下一个