怎么使用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