问题是这样的:用C#做一个WIN FORM,接收摄像头的信号,然后再截图,再把图片传入数据库.
前边部分接收依信号做好了,问题就是传入数据库.要求是不在本地保存图片的,就是一按截图按钮,直接以二进制数据保存入库.当然还得存进图片信息.麻烦教教我...

解决方案 »

  1.   

    你截的图,直接放到一个内存文件中——图对象,然后再通过socket传过去或直接写到数据库,没有难的吧?
      

  2.   

    不懂...我现在的代码水平只能做到这样: private void button3_Click(object sender, EventArgs e)
            {
                try
                {
                    Form1.SendMessage(this.hHwnd, 0x41e, 0, 0);
                    IDataObject obj1 = Clipboard.GetDataObject();
                    if (obj1.GetDataPresent(typeof(Bitmap)))
                    {
                        Image image1 = (Image)obj1.GetData(typeof(Bitmap));
                        SaveFileDialog SaveFileDialog1 = new SaveFileDialog();
                        SaveFileDialog1.FileName = DateTime.Now.ToString("yyyyMMddhhmmss");
                        SaveFileDialog1.Filter = "Image Files(*.JPG;*.GIF)|*.JPG;*.GIF|All files (*.*)|*.*";
                        if (SaveFileDialog1.ShowDialog() == DialogResult.OK)
                        {
                            image1.Save(SaveFileDialog1.FileName, ImageFormat.Bmp);
                        }
                    }
                }
                catch
                {
                }
            }
      

  3.   

      private void button3_Click(object sender, EventArgs e)//GetCapture
            {            SqlConnection Con = new SqlConnection("Data Source=Localhost; Initial Catalog=EX_NEW; User ID=sa;Pwd=photosystem;");
                string SqlCmd = "INSERT     INTO     ImageStore     (ImageData,     ImageContentType,     ImageDescription,     ImageSize)     VALUES     (@Image,     @ContentType,     @ImageDescription,     @ImageSize)";
                SqlCommand CmdObj = new SqlCommand(SqlCmd, Con);
                CmdObj.Parameters.Add("@Image", SqlDbType.Image).Value = textBox1.Text;
                CmdObj.Parameters.Add("@ImageDescription", SqlDbType.NVarChar).Value = Convert.ToByte(textBox1.Text);            //CmdObj.Parameters.Add("@Image", SqlDbType.Binary, FileLength).Value = FileByteArray;
                //CmdObj.Parameters.Add("@ContentType", SqlDbType.VarChar, 50).Value = fs.ContentType;     //记录文件类型       
                //把其它单表数据记录上传       
                CmdObj.Parameters.Add("@ImageDescription", SqlDbType.VarChar, 200).Value = textBox1.Text;
                //记录文件长度,读取时使用       
                //CmdObj.Parameters.Add("@ImageSize", SqlDbType.BigInt, 8).Value = UpFile.ContentLength;            Con.Open();            if (CmdObj.ExecuteNonQuery() == 1)
                {
                    MessageBox.Show("Successfully ");
                }
                else
                {
                    MessageBox.Show("Failed ");
                }
                Con.Close();
                try
                {
                    Form1.SendMessage(this.hHwnd, 0x41e, 0, 0);
                    IDataObject obj1 = Clipboard.GetDataObject();
                    if (obj1.GetDataPresent(typeof(Bitmap)))
                    {
                        Image image1 = (Image)obj1.GetData(typeof(Bitmap));
                        SaveFileDialog SaveFileDialog1 = new SaveFileDialog();
                        SaveFileDialog1.FileName = DateTime.Now.ToString("yyyyMMddhhmmss");
                        SaveFileDialog1.Filter = "Image Files(*.JPG;*.GIF)|*.JPG;*.GIF|All files (*.*)|*.*";
                        if (SaveFileDialog1.ShowDialog() == DialogResult.OK)
                        {
                            image1.Save(SaveFileDialog1.FileName, ImageFormat.Bmp);
                        }
                    }
                }
                catch
                {
                }
            }以上这段是我乱写的,但数据库的结构是对的.就是传入这个库里边,我都晕了一整天了,,,麻烦大家帮帮忙.
      

  4.   

    你看一下怎么用C#保存二进制文件到数据库,就知道了,你的Image无须保存到硬盘的,
      

  5.   

    你看一下怎么用C#保存二进制文件到数据库,就知道了,你的Image无须保存到硬盘的,
      

  6.   

    首先 你的数据库要是 image 数据类型
       然后 
         你需要一个 得到一个image/Bitmap对象。这个摄像头接口应该已经可以给你了。
       然后 
      BitMap returnImage;//假设这个是你得到的image对象
       MemoryStream ms = new MemoryStream();
                    returnImage = new Bitmap(ms);
                    
         returnImage .Save(ms, jpegICIinfo, ep);
               
                byte[] ima= ms.ToArray();  你得到的 ima 就是这个图片的 字节模式  ,然后以这个当数据源 通过ado.net 放入数据库中的  image类型字段里 就ok了!
      
      

  7.   

    returnImage .Save(ms, jpegICIinfo, ep); 
        这个jpegICIinfo 表示 你要用那种图片格式 比如 jpg gif png
        这个 ep 是 指代 压缩等级等参数 
      当然你也可以直接用
       returnImage.Save(ms);
      

  8.   

    bitmap 可以直接与 stream 进行转换,不需要写成磁盘文件
      

  9.   

    这个流程我再简单说一下 每一个点 你不会就自己查  首先 图片是一堆数字组成的 2维矩阵。
     
        通过 MemoryStream 
       将一个图片对象 变换成了一个 数字的集合
        也就是从 Bitmap 变成了 byte[] 
      
       怎么变的我上面的代码有。   然后 就是这么存在数据库里。   SqlServer里有一种数据类型 叫 image
       即是让你存储大量数字信息的   你首先要保证 你用来保存图片的字段是image类型的。
     
      然后用innsert语句插入 即可。 Ado.net的代码我不可能给你写。
       这里要记住你要写明要放多少数字进去。 一般都是 byte[] 的 length就可以了。     到这里整个过程结束。
      

  10.   

    Image image1 = (Image)obj1.GetData(typeof(Bitmap));
                        MemoryStream ms = new MemoryStream();
                        ((Bitmap)image1).Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); 
                        byte[] ima = ms.ToArray();
    我现在是写成这样,但是断点发现 byte[] ima = ms.ToArray();里的ima的值是空的
      

  11.   

    首先 你的 image对象里有东西没
     如果有东西 就绝对不会为空
      

  12.   

    然后额外说一句 数据库大量走 image 数据类型是效率很低下的。
      这种情况一般的解决办法,是将image 存在物理路径,然后把路径地址那个string 保存在 数据库中。
      
       效率高 而且易维护。
       除非你们要做图像数据分析。那就涉及到高级图像算法,比如人脸识别,图像相似度等,我觉得以你说的需求,应该还没有。
       所以 你可以在实现了以上的结构后,如果性能不好,尝试我说的解决方案。
      

  13.   

    Image image1 = (Image)obj1.GetData(typeof(Bitmap));
                        MemoryStream stream = new MemoryStream();
                        ((Bitmap)image1).Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);
                        BinaryReader reader = new BinaryReader(stream);
                        byte[] image_byte = new byte[stream.Length];
                        reader.Read(image_byte, 0, (int)stream.Length);写成这样image_byte 就有值,但库里没存进文件.