HRESULT LoadPSD( LPSTR strFilename ) // 读取PSD文件 { DWORD dwWidth, dwHeight; // 宽高 long lSurfWidth = m_Rect.right - m_Rect.left; long lSurfHeight = m_Rect.bottom - m_Rect.top; WORD CompressionType; // 压缩类型 HDC hDC; FILE *fpPSD; WORD ChannelCount; // 通道数 // 打开PSD文件 if ( ( fpPSD = fopen ( strFilename, "rb" ) ) == NULL ) { return E_FAIL; } // 头四个字节为"8BPS" char signature[5]; signature[0] = fgetc( fpPSD ); signature[1] = fgetc( fpPSD ); signature[2] = fgetc( fpPSD ); signature[3] = fgetc( fpPSD ); signature[4] = '/0'; if ( strcmp( signature,"8BPS" ) != 0 ) { return E_FAIL; } // 版本必须为1 if ( Read16( fpPSD ) != 1 ) { return E_FAIL; } // 跳过一些数据 (总是0) Read32( fpPSD ); Read16( fpPSD ); // 读取通道数 ChannelCount = Read16( fpPSD ); // 确定至少有一个通道 if ( ( ChannelCount < 0 ) || ( ChannelCount > MAX_PSD_CHANNELS ) ) { return E_FAIL; } // 读入宽和高 dwHeight = Read32( fpPSD ); dwWidth = Read32( fpPSD ); if ( dwWidth != ( DWORD )lSurfWidth || dwHeight != ( DWORD )lSurfHeight ) { return E_FAIL; } // 只读入8位通道 if ( Read16( fpPSD ) != 8 ) { return E_FAIL; } // 确定模式为RGB. // 可能值: // 0: 位图 // 1: 灰阶 // 2: 索引 // 3: RGB // 4: CMYK // 7: Multichannel // 8: Duotone // 9: Lab if ( Read16( fpPSD ) != 3 ) { return E_FAIL; } // 跳过数据(如调色板) int ModeDataCount = Read32( fpPSD ); if ( ModeDataCount ) fseek( fpPSD, ModeDataCount, SEEK_CUR ); // 跳过数据(如:pen tool paths, etc) int ResourceDataCount = Read32( fpPSD ); if ( ResourceDataCount ) fseek( fpPSD, ResourceDataCount, SEEK_CUR ); // 条过保留数据 int ReservedDataCount = Read32( fpPSD ); if ( ReservedDataCount ) fseek( fpPSD, ReservedDataCount, SEEK_CUR ); // 0: 非压缩 // 1: RLE压缩 CompressionType = Read16( fpPSD ); if ( CompressionType > 1 ) { return E_FAIL; } BYTE* PSDPixels = new BYTE[ ( lSurfWidth * lSurfHeight ) * 4 ]; // 解包数据 UnPackPSD( fpPSD, lSurfWidth, lSurfHeight, PSDPixels, ChannelCount, CompressionType ); fclose( fpPSD ); // 复制信息 BITMAPINFO BitmapInfo; ZeroMemory( &BitmapInfo, sizeof( BitmapInfo ) ); BitmapInfo.bmiHeader.biSize = sizeof( BitmapInfo.bmiHeader ); BitmapInfo.bmiHeader.biWidth = lSurfWidth; BitmapInfo.bmiHeader.biHeight = -lSurfHeight; BitmapInfo.bmiHeader.biPlanes = 1; BitmapInfo.bmiHeader.biBitCount = 32; m_lpDDS7->GetDC( &hDC ); int rc = StretchDIBits( hDC, 0, 0, lSurfWidth, lSurfHeight, 0, 0, lSurfWidth, lSurfHeight, PSDPixels, &BitmapInfo, DIB_RGB_COLORS, SRCCOPY ); m_lpDDS7->ReleaseDC( hDC ); if ( rc == GDI_ERROR ) { H_ARRAY_DELETE( PSDPixels ); #ifdef _DEBUG g_pHERR->OutDebugMsg( 3, H2DSERR_INVALID_PSD ); #endif return E_FAIL; } // 是否读取Alpha混合通道 if( ChannelCount > 3 ) { m_pbAlphaMask = new BYTE[ lSurfWidth * lSurfHeight ]; for ( int x = 0; x < lSurfWidth; x++ ) for ( int y = 0; y < lSurfHeight; y++ ) { m_pbAlphaMask[ ( y * lSurfWidth ) + x ] = PSDPixels[ ( ( ( y * lSurfHeight ) + x ) * 4 ) + 3 ]; } } else { m_pbAlphaMask = NULL; } H_ARRAY_DELETE( PSDPixels ); return DD_OK; } // PSD文件解包 void CHades2DSurface::UnPackPSD( FILE *fp, // fp为PSD文件指针, DWORD dwWidth, // dwWidth、dwHeight为宽高, DWORD dwHeight, BYTE* pixels, // pixels为解包目标指针, WORD ChannelCnt, // ChannelCnt为通道数, WORD Compression ) // Compression位压缩类型。 { int Default[4] = { 0, 0, 0, 255 }; int chn[4] = { 2, 1, 0, 3}; int PixelCount = dwWidth * dwHeight; if ( Compression ) { fseek( fp, dwHeight * ChannelCnt * 2, SEEK_CUR ); for ( int c = 0; c < 4; c++ ) { int pn = 0; int channel = chn[c]; if ( channel >= ChannelCnt ) { for ( pn=0; pn < PixelCount ;pn++ ) { pixels[ ( pn * 4 ) + channel ] = Default[ channel ]; } } else // 非压缩 { int count = 0; while( count < PixelCount ) { int len = fgetc( fp ); if( len == 128 ) { } else if ( len < 128 ) // 非RLE { len++; count += len; while(len) { pixels[ ( pn * 4 ) + channel ] = fgetc( fp ); pn++; len--; } } else if ( len > 128 ) // RLE打包 { len ^= 0x0FF; len += 2; unsigned char val = fgetc( fp ); count += len; while( len ) { pixels[ ( pn * 4 ) + channel ] = val; pn++; len--; } } } } } } else { for ( int c=0; c < 4; c++ ) { int channel = chn[c]; if ( channel > ChannelCnt ) { for( int pn = 0; pn < PixelCount; pn++ ) { pixels[ ( pn * 4 ) + channel ] = Default[ channel ]; } } else { for( int n = 0; n < PixelCount; n++ ) { pixels[ ( n * 4 ) + channel ] = fgetc( fp ); } } } } } 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/CometNet/archive/2010/02/16/5309971.aspx
本文向大家介绍VC读配置文件实例,包括了VC读配置文件实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了VC读配置文件的方法,分享给大家供大家参考。具体实现方法如下: 配置文件格式: 希望本文所述对大家的VC程序设计有所帮助。
函数名称:读文件返回字符串 函数功能:读文件操作,读取文件内容,返回全部内容的 string 函数方法 str = file.readString (path,encode) 参数 类型 必填 说明 path string 是 需要读取的文件路径 encode string 否 编码格式,不写默认为 utf-8 返回值 类型 说明 str string 文件内容 函数用例 path1 = "/sd
概述 面向群体:ui工程师 设计规范 1: 例如图中1的位置,它们在同一行,且与下面的结构不一致,应该归在同一组 1: 图2中的位置,可以看出,他是左右2列,按列对齐的,所以应该分成2组,在由这2组在组成一个大的组 1: 总的来说,就是横排能对齐的,且是相邻位置的,尽量在同一个组中,如果是横排不能对齐,而列能对齐的,切是相邻位置,也分在一个组中 1: 切记,在展示不同功能的模块中,不能由一整张图片
函数名称:读取剪贴板 函数功能:对系统剪贴板进行读取操作 函数方法 str = device.readPasteboard() 返回值 类型 说明 str string 剪贴板的内容 函数示例 写入并读取剪贴板内容 str1 = "测试写入剪贴板" device.writePasteboard(str1) --写入剪贴板后推荐加延时后再读取剪贴板,否则可能会出现读取错误的问题 mSleep(100
我正在尝试使用 azure 函数读取 azure blob 内容。 容器名称始终相同,Blob名称由触发该函数的队列消息传递。 当我运行此函数时,函数超时(超过5分钟)。 带有blob名称的队列消息是正确的并显示出来,blob只包含一个长json,大约是292kb。 我尝试在创建新blob时直接触发该函数,但它返回了一个带有流的对象,您知道任何方法使该流可读吗? 使用上面的代码,我可以正确获取bl
我想利用AZURE Function应用程序从AZURE BLOB存储中读取XLSX文件。该函数应由REST API调用来调用。我可以访问blob并下载文件,但我很难用pandas直接读取文件内容。我找了几个小时,但是找不到解决办法。我的最新方法是这样的: 在MS homepage*上,有一个从blob下载文件并随后进行处理的例子,但由于我使用的是功能应用程序,如果我没有遗漏任何内容,那么首先下载
VC-Logger 是一个简单易用的 C++ 程序通用日志组件。设计时着重考虑三个方面:功能、可用性和性能。为了让大家能更方便的学习 VC-Logger,特此精心制作了几个测试用例:TestGUILogger(GUI 版本测试用例 / 静态加载)、TestDynamicLogger(GUI 版本测试用例 / 动态加载)、TestConsoleLogger(Console 版本测试用例 / 静态加载
Virto Commerce Storefront Kit Precaution! Storefront version 5 and above is backward NON-compatible with VirtoCommerce platform v2! Use only with platform v3. Official online shopping website bas