查看: 3005|回复: 10

如何获取纹理每个像素的值

[复制链接]

该用户从未签到

发表于 2009-12-16 18:05:00 | 显示全部楼层 |阅读模式
请问,我将一张图读取到image中,有什么方法分别读取它每个像素的r,g,b,a值,并储存到数组中?我使用getColor,得到的都是1.
谢谢

该用户从未签到

发表于 2009-12-17 00:16:49 | 显示全部楼层
unsigned char *  data ()
  Raw image data.

const unsigned char *  data () const  
  Raw const image data.

unsigned char *  data (int column, int row=0, int image=0)

该用户从未签到

 楼主| 发表于 2009-12-17 08:16:34 | 显示全部楼层
那么得到的这个数组中的内容每一个字符是一个像素的值还是一个像素的一部分。比如下面的代码:
osg::Image *image;
unsigned char *pix = image-> data () ;
int iWid = image->s();
int iHeight = image ->t();
unsigned  char *chRed = new unsigned char[iWid*iHeight ];
for(int i=0;i<iWid;i++)
{
    for(int j=0;j<iHeight;j++)
    {
       chRed [i+j*iWid]=*(image+i+j*iWid);
    }
}
我在chRed中得到的是image中的像素值,还是每个像素的Red的值?
如果我想把每个像素的red、green、blue、alpha值分别取出来,该怎么做?
谢谢!

该用户从未签到

发表于 2009-12-17 08:39:57 | 显示全部楼层
注意您的Image是不是使用压缩形式的DDS图像?那样的话不能取数据,也不能检查是否透明;其它格式的数据都可以直接用getColor或者data来获取像素值

该用户从未签到

发表于 2009-12-17 08:40:21 | 显示全部楼层
注意您的Image是不是使用压缩形式的DDS图像?那样的话不能取数据,也不能检查是否透明;其它格式的数据都可以直接用getColor或者data来获取像素值

该用户从未签到

 楼主| 发表于 2009-12-17 09:31:52 | 显示全部楼层
也就是说,不是dds的话,比如bmp,imag->data返回的是iWidth*iHeight*3个字符的数组,对吗?

该用户从未签到

发表于 2009-12-17 12:12:24 | 显示全部楼层
data()只返回一个指向指定位置的指针,您可以用getColor(),那个函数没什么问题~

该用户从未签到

 楼主| 发表于 2009-12-17 14:49:44 | 显示全部楼层
getColor的参数是vec2,代表像素的行列数,返回值是vec4代表取得的像素的rgb值,取值在0-1之间,我理解的对吧?

该用户从未签到

发表于 2009-12-17 16:48:43 | 显示全部楼层
  1. Vec4 Image::getColor(unsigned int s,unsigned t,unsigned r) const
复制代码
这个函数是您所说的意思。参数为行列数

参数为Vec2的getColor函数,它的参数意义为纹理坐标,因此参数取值为0-1。看一看源代码不就什么都明白了~~

该用户从未签到

发表于 2012-12-10 12:20:51 | 显示全部楼层
array 发表于 2009-12-17 16:48
这个函数是您所说的意思。参数为行列数

参数为Vec2的getColor函数,它的参数意义为纹理坐标,因此参数取 ...

比如640*480的图像  那左下是0,0  右上是1,1  中间是(i/640, j/480)? 对么?

该用户从未签到

发表于 2012-12-10 13:05:07 | 显示全部楼层
array 发表于 2009-12-17 16:48
这个函数是您所说的意思。参数为行列数

参数为Vec2的getColor函数,它的参数意义为纹理坐标,因此参数取 ...

已解决。。看了您说的 终于会用了。。谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表