| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 875 人关注过本帖
标题:遇到一个很囧蛋的问题,关于指针的,已解决
只看楼主 加入收藏
hackerjiang
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:地球
等 级:版主
威 望:3
帖 子:780
专家分:111
注 册:2007-4-27
结帖率:100%
收藏
已结贴  问题点数:50 回复次数:5 
遇到一个很囧蛋的问题,关于指针的,已解决
我有这么一段代码,大意是,从摄像头获得照片的指针,然后绘制图像。
并非没有成功,而是在尝试另一种可能更快的方式的时候,遇到了错误。
错得我百思不得其解。

正常的代码
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册


异常的代码
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册


按道理来说,两者效果应该是一样的。

正常代码的思路是:
用循环每次选定一个像素,然后投入值。

异常代码的思路是:
首先取得“首像素”的地址,投入值之后偏移地址。

后者速度上应该更快。(我是这么猜想的)
但是为什么后者出现异常了呢?我百思不得其解。
难道这两段代码有我没注意到的区别?

补充说明:

摄像头返回的数据地址格式是32位的RGBA,图像像素是640*480。
一个RGBA像素大小是 ushort (32位)
每个RGBA成员大小是 uchar   ( 8位)
R:红;G:绿;B:蓝;A:透明(这里 A 我们不考虑)

涉及到的定义:

//类型定义
typedef struct _Depth_Color
{
    GLfloat R;
    GLfloat G;
    GLfloat B;
}Depth_Color;

//变量定义
Depth_Color* Video_RGB;
Depth_Color Depth_RGB[640][480];




我有这么一段代码,大意是,从摄像头获得照片的指针,然后绘制图像。
并非没有成功,而是在尝试另一种可能更快的方式的时候,遇到了错误。
错得我百思不得其解。

正常的代码



异常的代码



按道理来说,两者效果应该是一样的。

正常代码的思路是:
用循环每次选定一个像素,然后投入值。

异常代码的思路是:
首先取得“首像素”的地址,投入值之后偏移地址。

后者速度上应该更快。(我是这么猜想的)
但是为什么后者出现异常了呢?我百思不得其解。
难道这两段代码有我没注意到的区别?

补充说明:

摄像头返回的数据地址格式是32位的RGBA,图像像素是640*480。
一个RGBA像素大小是 ushort (32位)
每个RGBA成员大小是 uchar   ( 8位)
R:红;G:绿;B:蓝;A:透明(这里 A 我们不考虑)

涉及到的定义:

//类型定义
typedef struct _Depth_Color
{
    GLfloat R;
    GLfloat G;
    GLfloat B;
}Depth_Color;

//变量定义
Depth_Color* Video_RGB;
Depth_Color Depth_RGB[640][480];






[ 本帖最后由 hackerjiang 于 2011-11-16 19:57 编辑 ]
搜索更多相关主题的帖子: 照片 
2011-11-15 19:59
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:50 
回复 楼主 hackerjiang
手机看这个太费劲了,异常的代码和正常的代码有一点是不一样的,就是每循环一次写入的数组元素不一样,正常的代码是这样的:Depth_RGB[0][0],Depth_RGB[1][0],Depth_RGB[2][0]...,而异常的代码由于用指针取地址,每次自加1,顺序变成了Depth_RGB[0][0],Depth_RGB[0][1],Depth_RGB[0][2]...,你看看是这回事不

总有那身价贱的人给作业贴回复完整的代码
2011-11-15 22:45
smallmoon521
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:517
专家分:1373
注 册:2008-4-21
收藏
得分:0 
Video_RGB++时与之前的代码不是一个意思了

为游戏狂~~!!    大家努力编哈!
2011-11-16 07:57
silent_world
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:258
专家分:1138
注 册:2011-9-24
收藏
得分:0 
这两种现象的不同,需要从两个方面再做实验:
1、正如2楼描述,指针的位置不是按照同一个位置走(不知道你使用的什么平台),需要调换过来试试;
2、从现象分析,如果指针位置不对,图片应该转向才对,而仅仅是图片像素的颜色位有异常。
    从两幅图片比较来看,其黑色部分相同,白色部分相同,绿色部分相同,其他有异常。应该是R位和B位赋值相反的原因,但是,从代码却看不出来。你可以测试是否是因为平台的大小端引起的。
    建议你也调换像素的颜色位试试。

可以把你实验的结果发上来,大家再分析讨论。
2011-11-16 09:22
hackerjiang
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:地球
等 级:版主
威 望:3
帖 子:780
专家分:111
注 册:2007-4-27
收藏
得分:0 
以下是引用embed_xuel在2011-11-15 22:45:34的发言:

手机看这个太费劲了,异常的代码和正常的代码有一点是不一样的,就是每循环一次写入的数组元素不一样,正常的代码是这样的:Depth_RGB[0][0],Depth_RGB[1][0],Depth_RGB[2][0]...,而异常的代码由于用指针取地址,每次自加1,顺序变成了Depth_RGB[0][0],Depth_RGB[0][1],Depth_RGB[0][2]...,你看看是这回事不


我晕,看了你的评论后如梦初醒。

Depth_Color Depth_RGB[640][480];  改成  Depth_Color Depth_RGB[480][640];

大功告成~

(づ ̄ 3 ̄)づ
2011-11-16 14:02
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
使用指针要谨慎,不是不让用指针,而是用之前要想好

总有那身价贱的人给作业贴回复完整的代码
2011-11-16 18:17
快速回复:遇到一个很囧蛋的问题,关于指针的,已解决
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021941 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved