ccrun、songhtao和大是们进来看看吧,流操作的问题

nieshigui 2008-03-30 04:14:47
HDC dc = GetDC(0) ;
TCanvas * myCanvas = new TCanvas() ;
Graphics::TBitmap * myBitmap = new Graphics::TBitmap();
TJPEGImage *pimg = new TJPEGImage;
myCanvas->Handle = dc ;
myBitmap->Width = 1024;
myBitmap->Height = 768;
TMemoryStream *Sys_Buffer = new TMemoryStream();
myBitmap->Canvas->CopyRect(Rect(0,0,1024,768),myCanvas,Rect(0,0,1024,768));
pimg->Assign(myBitmap);
pimg->CompressionQuality=100;
pimg->SaveToStream(Sys_Buffer);
Sys_Buffer->Position=0;
//上面的不用管
int Y=108;
int len = (int)Sys_Buffer->Size+2;
char *socket_buffer=new char[(int)Sys_Buffer->Size+1];
socket_buffer[0]=(char)Y;
socket_buffer[1]=(char)len;
Sys_Buffer->Position=0;
ShowMessage (Sys_Buffer->Size);
memcpy(&socket_buffer[2],Sys_Buffer,Sys_Buffer->Size);
Sys_Buffer->Clear();


TMemoryStream *Buffer= new TMemoryStream();
Buffer->SetSize(len-2);
Buffer->Position=0;
memcpy(Buffer->Memory,&socket_buffer[2],len-2);
Buffer->Position=0;
pimg->LoadFromStream(Buffer);
myBitmap->Assign(pimg);
Image1->Canvas->CopyRect(Rect(0,0,1024,768),myBitmap->Canvas,Rect(0,0,1024,768));


Sys_Buffer->Clear();


ReleaseDC(0,dc) ;
delete myCanvas ;
delete myBitmap ;
delete pimg;



为什么我把流存入socket_buffer后在取出来没办法显示啊提示JPEG 52错误
...全文
125 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
过客猫2022 2008-04-07
  • 打赏
  • 举报
回复
路过
CACACACACA 2008-04-02
  • 打赏
  • 举报
回复
结贴吧。 又一白进来了。
zhao2008gang 2008-04-02
  • 打赏
  • 举报
回复
我把我写的读图片给你参考一下
DataModule1->ClientDataSet1->Close();
DataModule1->ClientDataSet1->CommandText = "select * from Machine where [index]='" + MacBox_1->Text +"'";
DataModule1->ClientDataSet1->Open();//上面的就是从数据库中相应的表中读取
TStream *stream;
MacBitmap=new Graphics::TBitmap();
stream=DataModule1->ClientDataSet1->CreateBlobStream(DataModule1->ClientDataSet1->FieldByName("PIC"),bmRead);//PIC是存储二进制文件的字段
MacBitmap->LoadFromStream(stream);
TRect TheRect;
TheRect=Rect(ML,MT,PaintBox1->Width,PaintBox1->Height);//放在此矩形里面
PaintBox1->Canvas->StretchDraw(TheRect,MacBitmap);//利用paintbox把图片描出来!
if(stream)
delete stream;
delete MacBitmap;
我不懂电脑 2008-03-31
  • 打赏
  • 举报
回复
楼上各位都很好。
海嵌 2008-03-31
  • 打赏
  • 举报
回复

void __fastcall TForm1::btn_1Click(TObject *Sender)
{
HDC dc = GetDC(0) ;
TCanvas * myCanvas = new TCanvas() ;
Graphics::TBitmap * myBitmap = new Graphics::TBitmap();
TJPEGImage *pimg = new TJPEGImage;
myCanvas->Handle = dc ;
myBitmap->Width = 1024;
myBitmap->Height = 768;
TMemoryStream *Sys_Buffer = new TMemoryStream();
myBitmap->Canvas->CopyRect(Rect(0,0,1024,768),myCanvas,Rect(0,0,1024,768));
pimg->Assign(myBitmap);
pimg->CompressionQuality=100;
pimg->SaveToStream(Sys_Buffer);
Sys_Buffer->Position=0;

//上面的不用管
int Y=108;
int len = (int)Sys_Buffer->Size+2;
char *socket_buffer=new char[(int)Sys_Buffer->Size+1];
socket_buffer[0]=(char)Y;
socket_buffer[1]=(char)len;
Sys_Buffer->Position=0;

ShowMessage (Sys_Buffer->Size);

Sys_Buffer->Read(&socket_buffer[2],Sys_Buffer->Size);
// memcpy(&socket_buffer[2],Sys_Buffer,Sys_Buffer->Size);

Sys_Buffer->Clear();


TMemoryStream *Buffer= new TMemoryStream();
Buffer->SetSize(len-2);
Buffer->Position=0;

Buffer->Write(&socket_buffer[2],len-2);
//memcpy(Buffer->Memory,&socket_buffer[2],len-2);

Buffer->Position=0;
pimg->LoadFromStream(Buffer);
myBitmap->Assign(pimg);

img_1->Canvas->CopyRect(Rect(0,0,1024,768),myBitmap->Canvas,Rect(0,0,1024,768));


Sys_Buffer->Clear();


ReleaseDC(0,dc) ;
delete myCanvas ;
delete myBitmap ;
delete pimg;
}
海嵌 2008-03-31
  • 打赏
  • 举报
回复
对于TMemoryStream 的操作用Read(),Write(),代替你的 memcpy().
ydlchina 2008-03-31
  • 打赏
  • 举报
回复
Sys_Buffer->Size它的返回类型就是__int64
所以
int len = (int)Sys_Buffer->Size+2;
直接改成
int len = Sys_Buffer->Size+2;,不用强制转换.
  • 打赏
  • 举报
回复
int len = *((int*)Sys_Buffer->Size+2);
这样么?
nieshigui 2008-03-30
  • 打赏
  • 举报
回复
上面的问题解决了,但是我如何把Sys_Buffer->Size的值赋给一个int 变量呢?
谁帮我解决了我在另一个贴的分全给他了。一共180分

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧