使用ijl库Jpg转RGB

本文详细介绍了如何使用特定算法将JPG图像数据转换为RGB图像缓冲区的过程,包括初始化JPEG核心属性、读取图像大小、根据颜色通道调整DIB属性等步骤。同时提供了设置JPEG缓冲区的函数实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include “ijl.h”

BOOL ConverJPG2BID(BYTE *lpJpgBuffer,

                      DWORD dwJpgBufferSize,

                      BYTE *lppRgbBuffer,

                      DWORD *lpdwWidth,

                      DWORD *lpdwHeight,

                      DWORD *lpdwNumberOfChannels)

{

     BOOL bres;

     IJLERR   jerr;

     DWORD    dwWholeImageSize;

     BYTE *lpTemp = lppRgbBuffer;

 

     JPEG_CORE_PROPERTIES jcprops;

     bres = TRUE;

 

     __try

     {

         jerr = ijlInit(&jcprops);

         if (IJL_OK != jerr)

         {

              bres = FALSE;

              __leave;

         }

 

         jcprops.JPGFile        = NULL;

         jcprops.JPGBytes   = lpJpgBuffer;

         jcprops.JPGSizeBytes = dwJpgBufferSize;

 

         jerr = ijlRead(&jcprops, IJL_JBUFF_READPARAMS);

         if (IJL_OK != jerr)

         {

              bres = FALSE;

              __leave;

         }

 

         switch (jcprops.JPGChannels)

         {

         case 1:

              {

                   jcprops.JPGColor   = IJL_G;

                   jcprops.DIBColor   = IJL_RGB;

                   jcprops.DIBChannels    = 3;

                   break;

              }

         case 3:

              {

                   jcprops.JPGColor   = IJL_YCBCR;

                   jcprops.DIBColor   = IJL_BGR;

                   jcprops.DIBChannels    = 3;

                   break;

              }

         default:

              {

                   jcprops.JPGColor   = IJL_OTHER;

                   jcprops.DIBColor   = IJL_OTHER;

                  jcprops.DIBChannels    = jcprops.JPGChannels;

                   break;

              }

         }

 

         dwWholeImageSize = jcprops.JPGWidth * jcprops.JPGHeight *

              jcprops.DIBChannels;

 

         jcprops.DIBWidth   = jcprops.JPGWidth;

         jcprops.DIBHeight  = jcprops.JPGHeight;

         jcprops.DIBPadBytes    = 0;

         jcprops.DIBBytes   = lpTemp;

 

         jerr = ijlRead(&jcprops, IJL_JBUFF_READWHOLEIMAGE);

         if (IJL_OK != jerr)

         {

              bres = FALSE;

              __leave;

         }

     } // __try

 

     __finally

     {

         ijlFree(&jcprops);

         *lpdwWidth    = jcprops.DIBWidth;

         *lpdwHeight   = jcprops.DIBHeight;

         *lpdwNumberOfChannels  = jcprops.DIBChannels;

     } // __finally

 

     return bres;

}

 

int CPictureXXX::SetJpegBuffer(void *pJpegBuf,

                                     DWORD len,

                                     BYTE *lppRgbBuffer,

                                     DWORD *lpdwWidth,

                                     DWORD *lpdwHeight)

{

     DWORD nChannels = 0;

 

     ConverJPG2BID((BYTE *)pJpegBuf, len, lppRgbBuffer, &(*lpdwWidth),

                            &(*lpdwHeight), &nChannels);

     return 0;

}

 

参数解释:

pJpegBuf:保存Jpeg图像数据的缓冲区;

len:保存Jpeg图像数据的size

lppRgbBuffer:保存转换成RGB后的图像缓冲区;

lpdwWidth:图像的宽,从jpg图像中获取;

lpdwHeight:图像的高,从jpg图像中获取;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值