WriteJPGBuffer方法使用libjpeg库而不是ijl15.lib

时间:2018-06-06 12:47:39

标签: c++ mfc opengl-3 libjpeg

我们使用ijl15.lib API实现了以下方法。 我们想使用libjpeg库而不是ijl。我应该如何使用libjpeg库实现WriteJPGBuffer?我们从文件中了解了LoadJPG和SaveJPG。但是我想使用libjpeg库在缓冲区中编写和读取jpg图像。任何输入都将非常有用。提前谢谢。

   unsigned char WriteJPGBuffer(unsigned int &size)
    {
      size = 0;
      int jErr;
      JPEG_CORE_PROPERTIES jpgProps;
      bool colorsSwapped;

      if (!jpgSupported)  
        return NULL;

      jErr = ijlInit(&jpgProps);
      if (jErr != IJL_OK)
        return NULL;


      jpgProps.DIBWidth = m_width;
      jpgProps.DIBHeight = -m_height;
      jpgProps.DIBBytes = (unsigned char *)m_pData;
      jpgProps.DIBPadBytes = 0 ;     
      jpgProps.DIBChannels = 4;
      jpgProps.DIBColor = IJL_RGB;

      jpgProps.JPGFile = NULL;
      jpgProps.JPGWidth = m_width;
      jpgProps.JPGHeight = m_height;
      jpgProps.JPGChannels = 3;
      jpgProps.JPGColor = IJL_YCBCR;
      jpgProps.JPGSubsampling = IJL_411;
      jpgProps.jquality = jpgQuality;   
      unsigned int iSize = m_width*m_height*3;
      unsigned char * pBuffer = new unsigned char[iSize];
      jpgProps.JPGSizeBytes = iSize;
      jpgProps.JPGBytes = pBuffer;

      jpgProps.jprops.jpeg_comment_size = (unsigned short)m_strCommentAdobe.length;
      jpgProps.jprops.jpeg_comment = (char*)m_strCommentAdobe;

      colorsSwapped = SetInternalFormat(RGB);

      jErr = ijlWrite(&jpgProps, IJL_JBUFF_WRITEWHOLEIMAGE);

      if (colorsSwapped)
        SetInternalFormat(BGR);

      if (jErr != IJL_OK)
      {
        ijlFree(&jpgProps);
        return NULL;
      }

      size = jpgProps.JPGSizeBytes;

      ijlFree(&jpgProps);

      return jpgProps.JPGBytes;
    }

1 个答案:

答案 0 :(得分:0)

感谢您的投入。我已经通过RND实现了以下解决方案。在下面的实现中,我们将图像数据以RGBQUAD形式存储在类成员变量中,我先使用ConversionfromGLRGBQUADToUnsignedChar函数将其转换为无符号char *,然后将其写入jpeg缓冲区。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
  <span>searchedString</span>
</div>