彩色图像转YUV格式序列存取(陆)
来源:互联网 发布:和邪社备用域名 编辑:程序博客网 时间:2024/05/16 17:51
任务:打开一幅24位彩色图像,将RGB转换为YUV格式序列,将YUV序列存储到ADO数据库中,并且同ListCtrl相关联.
10.30 晴
作者:陆建
1.RGB与YUV格式序列转换
第一个公式是YUV转换RGB(范围0-255)时用的,第二个公式是用在YUV(601)也成为YCbCr转换RGB(范围0-255)时用的。
1.
Y = 0.299R + 0.587G + 0.114B
U = -0.147R - 0.289G + 0.436B
V = 0.615R - 0.515G - 0.100B
U = -0.147R - 0.289G + 0.436B
V = 0.615R - 0.515G - 0.100B
R = Y + 1.14V
G = Y - 0.39U - 0.58V
B = Y + 2.03U
G = Y - 0.39U - 0.58V
B = Y + 2.03U
2.
B= 1.164 * (Y - 16) + 2.018 * (U - 128)
G= 1.164 * (Y - 16) - 0.38 * (U - 128) - 0.813 * (V - 128)
B= 1.164 * (Y - 16) + 2.018 * (U - 128)
G= 1.164 * (Y - 16) - 0.38 * (U - 128) - 0.813 * (V - 128)
R= 1.164 * (Y - 16) + 1.159 * (V - 128)
2.虚拟列表控件是指带有LVS_OWNERDATA风格的列表控件
虚拟列表控件使用起来非常简单。它总共只有三个相关的消息,如果你直接使用CListCtrl,应该在对话框中响应这三个消息。如果你使用CListCtrl派生类,可以在派生类中响应这三个消息的反射消息。这三个消息分别是:
(1)LVN_GETDISPINFO 控件请求某个数据
(2)LVN_ODFINDITEM 查找某个数据
(3)LVN_ODCACHEHINT 缓冲某一部分数据
(2)LVN_ODFINDITEM 查找某个数据
(3)LVN_ODCACHEHINT 缓冲某一部分数据
我们必须响应的消息是(1),多数情况下要响应(2),极少数的情况下需要响应(3).
1、处理 LVN_GETDISPINFO 通知消息
当虚拟列表控件需要某个数据的时候,它给父窗口发送一个 LVN_GETDISPINFO通知消息,表示请求某个数据。因此列表的所有者窗口(或者它自己)必须处理这个消息。例如派生类的情况 (CMyListCtrl是一个虚拟列表类对象):
//这里处理的是反射消息
BEGIN_MESSAGE_MAP(CMyListCtrl, CListCtrl)
//{{AFX_MSG_MAP(CMyListCtrl)
ON_NOTIFY_REFLECT(LVN_GETDISPINFO, OnGetdispinfo)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BEGIN_MESSAGE_MAP(CMyListCtrl, CListCtrl)
//{{AFX_MSG_MAP(CMyListCtrl)
ON_NOTIFY_REFLECT(LVN_GETDISPINFO, OnGetdispinfo)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
在LVN_GETDISPINFO的处理函数中,必须首先检查列表请求的是什么数据,可能的值包括:
(1)LVIF_TEXT 必须填充 pszText
(2)LVIF_IMAGE 必须填充 iImage
(3)LVIF_INDENT 必须填充 iIndent
(4)LVIF_PARAM 必须填充 lParam
(5)LVIF_STATE 必须填充 state
(2)LVIF_IMAGE 必须填充 iImage
(3)LVIF_INDENT 必须填充 iIndent
(4)LVIF_PARAM 必须填充 lParam
(5)LVIF_STATE 必须填充 state
根据它的请求,填充所需的数据即可。
//================= 例子代码===========================
下面的给出一个例子,填充的是列表所需的某个数据项的文字:
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
LV_ITEM* pItem= &(pDispInfo)->item;
LV_ITEM* pItem= &(pDispInfo)->item;
int iItemIndx= pItem->iItem;
if (pItem->mask & LVIF_TEXT) //字符串缓冲区有效
{
switch(pItem->iSubItem){
case 0: //填充数据项的名字
text=m_database[itemid].m_one;
{
switch(pItem->iSubItem){
case 0: //填充数据项的名字
text=m_database[itemid].m_one;
lstrcpyn(pItem->pszText, text, pItem->cchTextMax);
break;
case 1: //填充子项1
text=m_database[itemid].m_two;
case 1: //填充子项1
text=m_database[itemid].m_two;
lstrcpyn(pItem->pszText, text, pItem->cchTextMax);
break;
case 2: //填充子项2
text=m_database[itemid].m_three;
text=m_database[itemid].m_three;
lstrcpyn(pItem->pszText, text, pItem->cchTextMax);
break;
}
注意:在虚拟列表控件中由于对控件的属性设为OwnDtata,所以m_list.InsertItem(0,"Item 1_1");//m_list.SetItemText(0,1,0)等都不能用,通过利用MFC提供的vector类来进行数据的插入.
MFC对vector类的解释:
The STL vector class is a template class of sequence containers that arrange elements of a given type in a linear arrangement andallow fast random access to any element. They should be the preferred container for a sequence when random-access performance is at a premium.
3.ADO库中包含三个基本接口:它们分别是_ConnectionPtr、_RecordsetPtr和_CommandPtr。要注意的是数据的更新,即当输出数据后弹出vector类中的数据,这我主要在OnReadaccess()构造函数中利用了vector类的pop_back()函数,同时增加了一个变量的循环判断,即循环一次递减一,来读取任意长度的数据段。
有一个问题是由于没对数据库的删除,当连续读写后程序会很大,这对文件的保存和读写很不方便,需要重新编写一下!
- 彩色图像转YUV格式序列存取(陆)
- 彩色图像RGB转YUV
- 二次查表法实现真彩色图像YUV/RGB格式转换
- MATLAB 将YUV格式视频转换为图像帧序列
- 图像YUV格式采样格式
- 图像源格式(RGB,YUV)
- 将yuyv格式图像转为IplImage(彩色)
- JAVA序列化与反序列化三种格式存取(默认格式、XML格式、JSON格式)
- JAVA序列化与反序列化三种格式存取(默认格式、XML格式、JSON格式)
- JAVA序列化与反序列化三种格式存取(默认格式、XML格式、JSON格式)
- JAVA序列化与反序列化三种格式存取(默认格式、XML格式、JSON格式)
- JAVA序列化与反序列化三种格式存取(默认格式、XML格式、JSON格式)
- 彩色图像--色彩空间 YIQ 、YUV 、YCbCr 、YC1C2 和I1I2I3
- 彩色图像转灰度图像
- 视频与图像RGB/YUV格式详解
- 视频与图像RGB/YUV格式详解
- 视频与图像RGB/YUV格式详解
- 视频与图像RGB/YUV格式详解
- Apache配置虚拟主机, 转自http://www.ideagrace.com/html/doc/2005/10/27/00686.html
- [Fedora Core 6] 安装 Oracle 10g Client For Linux 安装
- 如何做好SQA
- CMM 简单介绍
- 清理内存的程序
- 彩色图像转YUV格式序列存取(陆)
- I18N&L10N
- XML入门
- 新版任务管理器
- 在window下编写linux代码
- (转载)使用kgdb调试linux内核及内核模块
- 我的人生我做主
- Vista 5840,这个版本能用多久
- 巧用网页显示硬盘内容