我把一个bmp文件读入流中,通过流来传输出去,如何发送这些包?如果这个文件有600K,每次只发2048字节,要处理流吗?还是直接把一个流数据都发出去?接收方又如何处理?
解决方案 »
- DelphiDistiller1.85不能应用,Remove Delphi 2010 RTM license....显示灰色
- delphi形势如何?
- 一个很难的问题!不知道如何解决
- 明天面试几个人,谁有好的上机测试题?
- 下载!Borland Delphi 2005 设计师架构(Arichitect)版正式版!
- ******如何在QQ中实现这样的功能,并用代码实现????谢谢了!
- treeview1中“+”号单击的事件是什么?
- 关于查询空值(acess表)
- Table保存出错问题,帮我看看?
- Delphi3和Delphi5的Table控件的问题
- 如何将一个32*32的图片变成一个64*64的图片
- winXP下编的关于SQL SERVER的数据库的软件,为什么在win98下不能运行?
1.接收端
//---------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop#include "Unit1.h"
#include <jpeg.hpp>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
ResultStream =new TMemoryStream();
TempStream =new TMemoryStream();
ResultStream->Size = 1024*768*3;
TempStream->Size = 1024*768*3;
ResultStream->Clear();
}
//---------------------------------------------------------------------------void __fastcall TForm1::FormDestroy(TObject *Sender)
{
delete ResultStream;
delete TempStream;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::NMUDP1DataReceived(TComponent *Sender,
int NumberBytes, AnsiString FromIP, int Port)
{
if(NumberBytes!=1)
{
TempStream->Clear();
NMUDP1->ReadStream(TempStream);
ResultStream->CopyFrom(TempStream,NumberBytes);
Edit1->Text = IntToStr(ResultStream->Size)+ "字节";
}
else if (NumberBytes ==1)
{
try
{
ResultStream->Position = 0;
TJPEGImage *jpeg=new TJPEGImage();
jpeg->LoadFromStream(ResultStream);
Graphics::TBitmap* bit = new Graphics::TBitmap();
bit->Width = jpeg->Width;
bit->Height = jpeg->Height;
bit->Canvas->StretchDraw(Rect(0,0,bit->Width,bit->Height),jpeg);
Image1->Picture->Graphic =bit;
//ScrollBar1->Max=jpeg->Width;
//Image1->Refresh();
//Refresh();
//jpeg->SaveToFile("h:\rec_temp.jpg");
delete jpeg;
delete bit;
}
catch(...)
{
ShowMessage("Error");
}
}}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
char Reqcode[29];
AnsiString ReqCodeStr;
ReqCodeStr = "Show"+ Edit2->Text;
StrCopy(Reqcode,ReqCodeStr.c_str());
ResultStream->Clear();
TempStream->Clear();
NMUDP1->RemoteHost =Edit2->Text;
NMUDP1->SendBuffer(Reqcode,30,30);
}
//---------------------------------------------------------------------------
2.截屏端
//---------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop#include "Unit1.h"
#include <jpeg.hpp>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
Thehe *hehe;
//---------------------------------------------------------------------------
__fastcall Thehe::Thehe(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------void __fastcall Thehe::FormCreate(TObject *Sender)
{
BmpStream =new TMemoryStream();
ResultStream =new TMemoryStream();
TempStream = new TMemoryStream();
ResultStream->Size =1024*768*3;
}
//---------------------------------------------------------------------------
void __fastcall Cut_Screen(int LeftPos,int TopPos,int RightPos,int BottomPos)
{
int RectWidth, RectHeight;
HDC SourceDC,DestDC,Bhandle;
Graphics::TBitmap *Bitmap =new Graphics::TBitmap();
RectWidth = RightPos-LeftPos;
RectHeight = BottomPos-TopPos; SourceDC = CreateDC("DISPLAY",NULL,NULL,NULL);
DestDC = CreateCompatibleDC(SourceDC);
Bhandle = CreateCompatibleBitmap(SourceDC,RectWidth,RectHeight);
SelectObject(DestDC,Bhandle);
BitBlt(DestDC,0,0,RectWidth,RectHeight,SourceDC,LeftPos,TopPos,SRCCOPY);
Bitmap->Handle = Bhandle;
hehe->BmpStream->Clear();
Bitmap->SaveToStream(hehe->BmpStream);
delete Bitmap;
DeleteDC(DestDC);
ReleaseDC(Bhandle,SourceDC);
//保存
hehe->BmpStream->SaveToFile("temp.bmp");
//bmp->jmp
Graphics::TBitmap* Bitmap1 = new Graphics::TBitmap();
Bitmap1->LoadFromFile("temp.bmp");
//Bitmap1->LoadFromStream(hehe->BmpStream);
Graphics::TBitmap* tmpBitmap = new Graphics::TBitmap();
tmpBitmap->Width = Bitmap1->Width;
tmpBitmap->Height = Bitmap1->Height;
tmpBitmap->Canvas->StretchDraw(TRect(0,0,tmpBitmap->Width,tmpBitmap->Height),Bitmap1);
TJPEGImage *jpeg =new TJPEGImage();
jpeg->PixelFormat = jf8Bit;
jpeg->CompressionQuality =100;
jpeg->Assign((TPersistent*) tmpBitmap);
jpeg->Compress(); hehe->BmpStream->Clear();
jpeg->SaveToStream(hehe->BmpStream); //ShowMessage(hehe->BmpStream->Size);
jpeg->SaveToFile("temp.jpg");
delete tmpBitmap;
delete jpeg;
delete Bitmap1;
}
//---------------------------------------------------------------------------void __fastcall Thehe::NMUDP1DataReceived(TComponent *Sender,
int NumberBytes, AnsiString FromIP, int Port)
{
Cut_Screen(0,0,Screen->Width,Screen->Height);
// ShowMessage("已截图");
const int ThreshHold =2048;
BmpStream->Position =0;
char* Buffer =new char[ThreshHold];
int Buffersize = hehe->BmpStream->Size; int Buffers = Buffersize/ThreshHold;
//ShowMessage(Buffers);
NMUDP1->RemoteHost = FromIP;
Label1->Caption = "请求来源:"+FromIP;
Label2->Caption = "已经发送:0字节";
Refresh();
// Socket->SendBuf("s",1); //标志开始发送
for(int i=0;i<=Buffers;i++)
{
// ShowMessage("已开始for");
if(Buffersize>=ThreshHold)
{
Sleep(1);
hehe->BmpStream->Read(Buffer,ThreshHold);
NMUDP1->SendBuffer(Buffer,ThreshHold,ThreshHold);
// ShowMessage(i);
}
else
{
if(Buffersize <=0)
break;
else
{
hehe->BmpStream->Read(Buffer,Buffersize);
NMUDP1->SendBuffer(Buffer,ThreshHold,ThreshHold);
} }
Buffersize-=ThreshHold;
Label2->Caption = "已发送:"+IntToStr(BmpStream->Size-Buffersize);
}
NMUDP1->SendBuffer("E",1,1);
delete Buffer;
}
//---------------------------------------------------------------------------
void __fastcall Thehe::FormDestroy(TObject *Sender)
{
delete BmpStream;
delete ResultStream;
delete TempStream;
}
//---------------------------------------------------------------------------