2023年7月15日发(作者:)
有另一种方法,来实现
把你这个图片用Graphics对象缩小,然后再发送出去就可以了,一些视频就是这样做的。代码如下:
C# code
using System;
using g;
using tions;
using entModel;
using ;
using ;
using ;
using s;
using ing;
using ;
using g;
using g2D;
...
//远端客户机
private EndPoint remotePoint=new IPEndPoint(,0);
private Thread myThread;
public Form1()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
myThread=new Thread(new ThreadStart(ListenUdp));
();
//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}
///
/// 清理所有正在使用的资源。
///
protected override void Dispose( bool disposing )
{
if(myThread!=null){();}
if( disposing )
{
if (components != null)
{ e();
}
}
e( disposing );
}
...
public webcam wcam=null;
private void Form1_Load(object sender, rgs e)
{
wcam=new
webcam(,0,0,,);
();
}
private void btnSend_Click(object sender, rgs e)
{
d=true;
al=100;
}
public void ListenTcp()
{
IPEndPoint ipep=new IPEndPoint(,9050);
Socket ListenSock=new
Socket(etwork,,);
(ipep);
(10);
Socket client=();
IPEndPoint clientipep=(IPEndPoint)EndPoint;
NetworkStream ns=new NetworkStream(client);
while(true)
{
=ream(ns);
}
}
public void sentMsgTcp(Image myPic)
{
IPEndPoint ipep=new IPEndPoint((),9050);
Socket SendSocket=new
Socket(etwork,,);
t(ipep);
NetworkStream ns=new NetworkStream(SendSocket);
//把图片以Bmp格式写入流ns
(ns,);
();
();
}
public void ListenUdp()
{
byte[] data;
int recv;
IPEndPoint ipep=new IPEndPoint(,9050);
Socket ListenSock=new
Socket(etwork,,);
(ipep);
while(true)
{
data=new byte[20000000];
recv=eFrom(data,ref remotePoint);
//反序列化
object msgObj=alize(data);
Bitmap mybm=(Bitmap)msgObj;
//把图片放大充满容器,并给容器
=ChangImage(mybm,,);
}
}
public void sentMsgUdp(Image myPic)
{
byte[] sendData=new byte[20000000];
IPEndPoint ipep=new IPEndPoint((),9050);
Socket SendSocket=new
Socket(etwork,,);
sendData = ize(myPic);
(sendData,,,ipep);
(); }
private void timer1_Tick(object sender, rgs e)
{
IDataObject data;
Image bmap;
// Copy image to clipboard
ssage(,_CAP_EDIT_COPY, 0, 0);
// Get image from clipboard and convert it to a bitmap
data = aObject();
if (aPresent(typeof()))
{
bmap = ((Image)(a(typeof())));
//把图片变小,供传送
bmap=ChangImage(bmap,150,150);
sentMsgUdp(bmap);
}
}
//把原Image转成小的Image
public Image ChangImage(Image imageIn, int towidth,int toheight){
//新建一个bmp图片
Image bitmap = new Bitmap(towidth, toheight);
//新建一个画板
Graphics g = age(bitmap);
//设置高质量插值法
olationMode = ;
//设置高质量,低速度呈现平滑程度
ingMode = ality;
//清空画布并以透明背景色填充
(arent);
//在指定位置并且按指定大小绘制原图片的指定部分
age(imageIn, new Rectangle(0, 0, towidth, toheight),new Rectangle(0, 0,
,),);
return bitmap;
}
这是序列化的代码:
C# code
using System;
using ;
using ;
namespace VideoTransmission
{
///
/// FormatterHelper 序列化,反序列化消息的帮助类
///
public class FormatterHelper
{
public static byte[] Serialize(object obj)
{
BinaryFormatter binaryF = new BinaryFormatter();
MemoryStream ms = new MemoryStream(1024*10);
ize(ms, obj);
(0, );
byte[] buffer = new byte[(int)];
(buffer, 0, );
();
return buffer;
}
public static object Deserialize(byte[] buffer)
{
BinaryFormatter binaryF = new BinaryFormatter();
MemoryStream ms = new MemoryStream(buffer, 0, , false);
object obj = alize(ms);
();
return obj;
}
}
}
发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1689409328a243412.html
评论列表(0条)