首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

如何使用TSream的小疑点,解决马上结贴

2012-02-08 
怎么使用TSream的小问题,解决马上结贴!我想用TImage控件显示磁盘上一张jpg图片的内容,代码如下://从磁盘中

怎么使用TSream的小问题,解决马上结贴!
我想用TImage控件显示磁盘上一张jpg图片的内容,代码如下:
        //从磁盘中读取jpg文件
        FILE   *file;                                   //要#include   <stdio.h>
        BYTE   *pBuffer;
        long   filelength=0;
        if((file   =   fopen(   "c:\\1.jpg ", "rb "   ))   !=   NULL   )
        {
                fseek(file,0,SEEK_END);                                 //指向文件尾,为了得到文件的长度
                filelength=ftell(file);                                 //先得到文件的长度
                pBuffer=new   BYTE[filelength];                     //再根据文件长度分配缓存的大小
                fseek(file,0,SEEK_SET);                                 //指向文件头,为了读取文件内容
                fread(pBuffer,sizeof(BYTE),filelength,file);       //读取图片文件内容
                fclose(file);
        }
        else
        {
                ShowMessage( "无法打开文件。 ");
                return;
        }
        TStream   *PhotoStream;
        PhotoStream-> Read(pBuffer,filelength);//从缓存中读取图片内容
        TJPEGImage   *jpeg=new   TJPEGImage;                         //要#include   <jpeg.hpp>
        PhotoStream-> Position=0;
        jpeg-> LoadFromStream(PhotoStream);                     //把文件流的内容传进TJPEGImage对象
        Image1-> Picture-> Assign(jpeg);                             //费了不少周折,终于可以显示图片内容了
        //最后还要记得回收、释放资源
        delete   []pBuffer;
        pBuffer=NULL;
        delete   jpeg;
        jpeg=NULL;
        PhotoStream-> Free();

可是总是在:PhotoStream-> Read(pBuffer,filelength);这行出错。到底怎么用TStream?我看了半天Help中的说明,愣是没看懂Read和Write这两个方法到底是把缓存pBuffer中的内容读进PhotoStream,还是反之,把PhotoStream中的内容读进pBuffer?请大家帮我把上面的代码改一下,谢谢!

[解决办法]
#include <jpeg.hpp> 试试

不过干嘛要舍近求远,
Image1-> Picture-> LoadFromFile( "c:\\1.jpg ");即可

[解决办法]
PhotoStream-> Read(pBuffer,filelength);
-----------------------------
你这里并没有得到你想要的数据, 遇到 '\0 '就认为结束.

是否考虑用 TMemoryStream *PhotoStream;


[解决办法]
TStream *PhotoStream;
PhotoStream-> Read(pBuffer,filelength);//从缓存中读取图片内容
//你还真行,好呆先new一下吧?
[解决办法]
TStream是纯虚类,不能直接建立其对象。可以使用其子类,比如TMemoryStream。
[解决办法]
1.没有创建对象.2.TStream的对象必须用子类来new
[解决办法]
mark
[解决办法]
TStream *PhotoStream;
PhotoStream-> Read(pBuffer,filelength);//从缓存中读取图片内容

这样也行?PhotoStream只是个指针啊,没指向任何东西
new出来吧

[解决办法]
pBuffer=new BYTE[filelength];
改为:
pBuffer=new BYTE[filelength+1];

TStream 改为:TMemoryStream

热点排行