图像数据BYTE *pData;
    Bitmap.save(11.jpg,&csid);    保存都是24位 
    
    怎么保存为8位的
       谢了

解决方案 »

  1.   

    保存为8位首先要把原始图像数据变为8位的,然后还要设置相应的调色板,在保存的时候还要指定保存的格式为 PixelFormat8bppIndexed  。
      

  2.   

    我是图像已经8位图像数据怎么设置保存的格式为 PixelFormat8bppIndexed  在那里设置
      

  3.   


          
    SaveFile(BYTE *pData,LPCSTR lpstrname)
    {  
        if(pData==NULL)
    return FALSE;    
        CLSID clsid;
        USES_CONVERSION;
        LPWSTR wStr = A2W(lpstrname);
        Bitmap bitmap(nWidth,nHeight,PixelFormat8bppIndexed);
       
    ///////////////////Palette//////////////////    DWORD dwsizecolorpalette;
        dwsizecolorpalette=sizeof(ColorPalette);
        dwsizecolorpalette=dwsizecolorpalette+sizeof(ARGB)*(256-1);    ColorPalette *ppal=(ColorPalette*)new BYTE [dwsizecolorpalette];  
        ASSERT(ppal);
        ZeroMemory(ppal,dwsizecolorpalette);    ppal->Flags=PaletteFlagsGrayScale;//灰阶
         ppal->Count=256;
       for(int i=0;i<256;i++)
       {
         BYTE alpha=0xff;
     BYTE r=i;
     BYTE g=i;
     BYTE b=i;
         ppal->Entries[i]=Color::MakeARGB(alpha,r,g,b);
       }   bitmap.SetPalette(ppal);
       //////////////Palette/////////////////////
       //////////////copy////////////////////////
       
       BitmapData  bitmapData;
       Rect        rect(0, 0, nWidth, nHeight);
       
       bitmap.LockBits(&rect,ImageLockModeWrite,PixelFormat8bppIndexed,&bitmapData);   memcpy(bitmapData.Scan0,pData,nWidth*nHeight);   bitmap.UnlockBits(&bitmapData);
       ///////////////copy////////////////////////////   Status SaveStatus = bitmap.Save(wStr, &clsid,NULL);// &encoderParameters);
       if(SaveStatus != Ok)
      {
       AfxMessageBox(_T("Failed to save to stream!"));
       return FALSE;
      }}
    结果 还是不行 还是24位
      

  4.   

    这个好像是GDI+做不到的 8bit的jpeg很少见 我是没有见过 GDI+估计不支持 
    所以只要你用Save函数保存它就会把它给弄成24位的(其实数据也已经压缩了)//You can draw the following conclusions by examining the preceding program output: //The JPEG encoder supports the Transformation, Quality, LuminanceTable, and ChrominanceTable parameter categories. 
    //The TIFF encoder supports the Compression, ColorDepth, and SaveFlag parameter categories. 上一段引自:http://msdn.microsoft.com/en-us/library/ms533846(VS.85).aspxJpeg 编码 支持 变换 质量...这些参数 看到了吧 没有ColorDepth 所以 即便你设定了也没有用处。