急!
解决方案 »
- VC++ SDK 界面!!!
- 神秘的HANDLE,神秘的WIN32,神秘的MICROSOFT
- 为什么得不到Dll中结构的成员变量的值?
- 怎么用wxWidgets实现橡皮筋式画线
- 刚学会做界面,接下来要如何学数据库才能少走弯路?
- 求助!!listctrl(列表控件)中对列操作的问题
- 备份程序文件恢复策略--直接写目标文件?还是先生成临时文件,然后删除老文件,再将临时文件覆盖过去?
- 如何得到最近三天内,ie 浏览过得图片,从ie 临时文件夹中获取?
- 花了1个多月,今天终于把毕业论文最后一个问题搞定了,爽!散分!来者有分。
- houzx()进来取分,我就这些分了,太感谢你了,
- 请问在sdi下如何显示两套不同的菜单?
- 如何枚举一个窗口中所有的像EDIT的子窗口句柄。
有一个JPEG的类可以down,你去看看
{
BOOL bRet = FALSE ;
BYTE * pStart = NULL ;
HANDLE hMap = NULL ;
HANDLE hFile = INVALID_HANDLE_VALUE ; Free();
__try
{
// 映射文件
pStart = this->__fooImageReadFile (szFileName, &hFile, &hMap) ;
if (pStart == NULL)
__leave ; // 读文件
if (!this->LoadJpeg (pStart, ::GetFileSize (hFile, NULL)))
__leave ;
bRet = TRUE ;
}
__finally
{
this->__fooImageUnmapFile ((BYTE *)pStart, hMap, hFile) ;
}
return bRet ;
}BOOL CDib::LoadJpeg(BYTE * pStart, int iFileSize)
{
BOOL bRet = FALSE ; __try
{
JPEG_CORE_PROPERTIES image ;
::ZeroMemory (&image, sizeof(image)) ; // Init the IJL
if (ijlInit (&image) != IJL_OK)
return FALSE; // 读图象信息
image.JPGBytes = pStart ;
image.JPGSizeBytes = iFileSize ;
if (ijlRead (&image, IJL_JBUFF_READPARAMS) != IJL_OK)
return FALSE; // 设置目标DIB
image.DIBChannels = 3 ;
image.DIBColor = IJL_BGR ;
switch (image.JPGChannels)
{
case 1 : image.JPGColor = IJL_G ; break ;
case 3 : image.JPGColor = IJL_YCBCR ; break ;
case 4 : image.JPGColor = IJL_YCBCRA_FPX ;
image.DIBChannels = 4 ;
image.DIBColor = IJL_RGBA_FPX ;
break ;
default : image.JPGColor = image.DIBColor = (IJL_COLOR)IJL_YCBCR ;
} m_nWidth = image.JPGWidth ;
m_nHeight = image.JPGHeight ; m_pBMI = (LPBITMAPINFO)GlobalAllocPtr(GHND, 40);
if (m_pBMI == 0)
return FALSE;
// set up a DIB
m_pBitmapInfoHeader = (BITMAPINFOHEADER*) m_pBMI; m_pBitmapInfoHeader->biSize = sizeof(BITMAPINFOHEADER);
m_pBitmapInfoHeader->biWidth = m_nWidth;
m_pBitmapInfoHeader->biHeight = m_nHeight;
m_pBitmapInfoHeader->biPlanes = 1;
m_pBitmapInfoHeader->biBitCount = 24;
m_pBitmapInfoHeader->biCompression = BI_RGB;
m_pBitmapInfoHeader->biSizeImage = 0;
m_pBitmapInfoHeader->biXPelsPerMeter = 0;
m_pBitmapInfoHeader->biYPelsPerMeter = 0;
m_pBitmapInfoHeader->biClrUsed = 0;
m_pBitmapInfoHeader->biClrImportant = 0; //设置颜色数
m_nBitCount = (BYTE)m_pBitmapInfoHeader->biBitCount; image.DIBWidth = m_nWidth ;
image.DIBHeight = -m_nHeight ; // DIB Format
image.DIBPadBytes = IJL_DIB_PAD_BYTES(image.DIBWidth,image.DIBChannels);//this->GetPitch() - m_nWidth * image.DIBChannels ; //数据长度
DWORD dwLength = (m_nWidth * 3 + image.DIBPadBytes) * m_nHeight;
m_pDibData = (LPBYTE)GlobalAllocPtr(GHND, dwLength );
if (m_pDibData == 0)
{
GlobalFreePtr(m_pBMI);
m_pBMI = NULL;
return FALSE;
} m_pBitmapInfoHeader->biWidth = m_nWidth;
m_pBitmapInfoHeader->biHeight = m_nHeight;
image.DIBBytes = m_pDibData ;
if (ijlRead (&image, IJL_JBUFF_READWHOLEIMAGE) != IJL_OK)
return FALSE; //指向位图数据
m_pBits = m_pDibData;
// 32位色图象交换R B
if (image.DIBChannels == 4)
{
BYTE tmp;
for(int i=0;i<m_nHeight;i++)//b<->r
for(int j=0;j<m_nWidth;j++)
{
tmp=*(m_pBits+(long)i*m_nWidth*3+j*3);
*(m_pBits+(long)i*m_nWidth*3+j*3)=*(m_pBits+(long)i*m_nWidth*3+j*3+2);
*(m_pBits+(long)i*m_nWidth*3+j*3+2)=tmp;
}
}
ijlFree (&image) ;
bRet = TRUE ;
m_bValid=TRUE; //设置有效标志
}
__finally
{
return FALSE;
}
return bRet ;
}