我用TIFF LIB把数据取出来以后,因为图像是32位RGB图像,所以我想在处理之前把图像转换成0~255,但是我不知道32位图像数据的组织形式,之前以为跟八位和十六位图像数据一样,值域是0~2^32-1,但是转换以后发现数据对不上,请问32位图像数据是怎么回事呢?万分感谢。

解决方案 »

  1.   

    把高位去掉,和24位转8位的算法一样如何将真彩色图转换为各种灰度图
    http://www.cppblog.com/windcsn/archive/2010/04/23/10608.html
      

  2.   

    我想楼主的意思并不是要转换为8位图像。而是搞不清ARGB格式的图像的内存布局。
      

  3.   

    32位的话应该是ARGB,其中A(alpha)是指像素的透明度,其他的就不用解释了吧
      

  4.   

    可能我没有把问题说清楚,我说的32位数据不是指一个像素占32位,而是指图像的位深度是32位,也就是一个RGB像素占12个字节.
      

  5.   

    楼主讲的可能是GDI+中的这种格式把,PixelFormat48bppRGB,这种格式真的还是很少接触,也不晓得如何创建,不知道能不能用GdipBitmapLockBits进行自动转换。
      

  6.   

    我是直接用TIFF LIB读取图像数据获取的,分配内存是根据图像的大小以及图像的位深度来分配的.因为我要把图像进行显示,所以要把数据转换成0~255,我原以为是像位深度为16的图像一样,直接把(0~4294967295)归到(0~255)就可以了,但是后来发现这样是不对的.
      

  7.   

    不是,我是读取位深度为32位的TIFF文件时碰到的.
      

  8.   

    我不知道怎么上传文件,可以在Photoshop里面制作一个32位的RGB图像.
      

  9.   

    一个像素就是32位,其中 RGB各占8位,共计24位,透明通道占8位,所以共计32位。它的取值方法是:将每个点的值分别进行取余和整除,就可以分分别得到 ARGB 的值。如果按你的理解,每个像素32位,则是4个字节,(每个字节占8位),不是12个字节。
      

  10.   

    我说的32位是指图像的位深度,不是指一个像素占的位数,在Photoshop里面是可以做出这种图像的.
      

  11.   

    一个像素就是32位,其中 RGB各占8位,共计24位,透明通道占8位,所以共计32位。它的取值方法是:将每个点的值分别进行取余和整除,就可以分分别得到 ARGB 的值。如果按你的理解,每个像素32位,则是4个字节,(每个字节占8位),不是12个字节。
      

  12.   

    就是一个颜色合并,大致R 111*****
    G 111*****
    B 11******合并为一个颜色
    R 11100000
    G 11100000
    B 1100000
      

  13.   

    我说是32位是位深度,不是一个像素32位。
    谁能告诉我怎么不上传文件,我想把图像文件上传上来。。
    或者加我MSN:[email protected]
      

  14.   

    每个像素32*3位。。每个通道数据占32位。。我们平时用的图像是每个通道占8位,还有16位。在Photoshop里面图像位深度的设置的。
      

  15.   

    位深度32位是指每个通道占32位,一个像素占32位的话,如果图像是CMYK模式的图像,则每个通道占8位,如果是RGB图像的话,则就是带alpha通道的RGB图像,每个通道占8位。
      

  16.   

    我营业有疑问,32位真彩色转为8位灰度图公式怎么计算?24位转为8为的公式是;Y=R*0.299+G*0.587+B*0.114,具体代码是 :
    for(i=0;i<len;i++)
    {
       for(j=0;j<with;j++)
      {
         pDes=0.114*pSrc[i][3*j]+0.587*pSrc[i][3*j+1]+0.299pSrc[i][3*j2];
      }
    }
    但是,对于32位转为24位公式该怎么改呢?