找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1166|回复: 0
打印 上一主题 下一主题
收起左侧

串口传图 VC

[复制链接]
跳转到指定楼层
楼主
用vc6写的一个简易串口工具,可以通过串口输入的数据(如: 一个像素点(0x12,0xf0)(0x13,0x13)  )生成保存图片到程序目录下格式:320*240 ,160*120,80*60都可以

数据多了电脑容易卡死,可能是vc串口模块占用CPU导致
若是有需要会贴上代码 串口传图工具.rar (6.18 MB, 下载次数: 11)

//********************遍历逐个像素改变图像******************
                UpdateData(TRUE); //更新所有编辑框的数据,存入变量
                CString imgstr;
                for(int y=0;y<m_height;y++)        //y<src->height
                {        
                        unsigned char *bslImgData = (unsigned char *)(src->imageData+y*src->widthStep);        //图像src第y行
                        for(int x=0;x<m_width;x++)        //图像第x列 src->width        
                                imgstr+=bslImgData[3*x+0]/2;
                }
                m_com.SetOutput(COleVariant(imgstr));        //将字符串发送出去,因是char型,单字节的值不大于127(0x7f);
                imgstr.Empty();                //清空数据
                cvDestroyWindow("disp");
    }
}
//********************保存图像******************
void CMyDlg::OnSaveimg()
{
        // TODO: Add your control notification handler code here
        UpdateData(TRUE); //更新所有编辑框的数据,存入变量
        IplImage *img = cvCreateImage(cvSize(m_width,m_height),8,3);        //默认为三通道图像宽100,高108
        next=0;
        CByteArray hexdata;
        int len = String2Hex(m_recmsg, hexdata);
        m_recmsg.Empty();        //清空接收缓存
        SetDlgItemText(IDC_RECMSG,m_recmsg);        //清空接收框
        BYTE temp=0,temp2=0;
        for(int v=0;v<img->height;v++)
        {
                unsigned char *imgdat = (unsigned char *)(img->imageData+v*img->widthStep);        //图像img第y行
                for(int w=0;w<img->width;w++)        //图像第x列
                {//接收RGB565数据,数据格式为2byte数据,分别是5位b,6位g,5位r,共同组成
                imgdat[w*3+0] = savimg[next]&0xf8;                //取rgb565的r红色
                imgdat[w*3+1] =(savimg[next]&0x07)<<5;
                next++;
                imgdat[w*3+1] |=(savimg[next]&0xe0)>>3;        //取rgb565中间b绿色
                imgdat[w*3+2] = (savimg[next]&0x1f)<<3;                //取rgb565的b蓝色
                //imgdat[w*3+0] = imgdat[w*3+2] = imgdat[w*3+1];  取蓝色作为灰图显示
                next++;
                if(len==next)break;
                }
        }
        savimg.Empty();         //清空数据
//*********************获取系统时间保存图片****************
                CTime time;
                char szTime[100];
                time = CTime::GetCurrentTime();
                sprintf(szTime,"%4d%.2d%.2d%.2d%.2d%.2d%s",time.GetYear(),time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond(),".jpg");
                cvSaveImage(szTime,img);        //保存串口收到的图像
                AfxMessageBox("保存成功!");
                cvNamedWindow("disp");
                cvShowImage("disp",img);
                cvWaitKey(0);
                cvDestroyWindow("disp");
}


20181226174204.jpg (7.76 KB, 下载次数: 83)

ov7670上传数据生成的图片

ov7670上传数据生成的图片

源码.rar

3.82 KB, 下载次数: 10, 下载积分: 黑币 -5

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表