首页
社区
课程
招聘
[求助]一个Bitmap(IStream *stream, BOOL useIcm)函数问题
发表于: 2010-1-16 14:15 6186

[求助]一个Bitmap(IStream *stream, BOOL useIcm)函数问题

2010-1-16 14:15
6186
我使用Bitmap bitmap(pstream, FALSE),即用一个stream初始化一个bitmap对象,但是总是不能初始化bitmap对象,调用sta = bitmap.GetLastStatus()发现sta=2,即参数不正确,pstream为一个istrorage中的一个istream,为什么说参数不正确?

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 43
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我的代码如下:
char buf[100] = {0};

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
        // TODO: Place code here.

        GdiplusStartupInput m_gdiplusStartupInput;
    ULONG_PTR m_pGdiToken;

        HRESULT hr;
        Status sta= GenericError;
       
        IStorage *pstgNew = 0;
        IStream  *pstream = 0;;
        IStream  *pstream1 = 0;;
       
        HBITMAP *hbitmap;
        ULONG dwBytes;

        STATSTG statstg;

        GdiplusStartup(&m_pGdiToken,&m_gdiplusStartupInput,NULL);

        hr = StgOpenStorage(L"Thumbs.db", 0, 0x20, NULL, 0, &pstgNew);
        if(S_OK != hr)        MessageBox(0,"error",0,0);

        IEnumSTATSTG *penum;
       
        pstgNew->EnumElements(0, 0, 0, &penum);

         hr = penum->Next( 1, &statstg, 0 );

         

         while (S_OK == hr)
         {

                 if( STGTY_STREAM == statstg.type
                         &&
                         L'\005' != statstg.pwcsName[0])
                 {
                         MessageBoxW(0, statstg.pwcsName, L"STREAM", 0);

                         pstgNew->OpenStream(statstg.pwcsName, 0, STGM_READ | STGM_SHARE_EXCLUSIVE, 0, &pstream);
                         break;

                         
                 }
                 else
                 {
                         MessageBoxW(0, statstg.pwcsName, L"NO STREAM", 0);

                 }

                 hr = penum->Next( 1, &statstg, 0 );
                 
        }

         if (pstream == 0)
         {
                 MessageBox(0, "pstream 0", 0, 0);
                 
         }
        _asm int 3
        Bitmap bitmap(pstream, TRUE);

     sta = bitmap.GetLastStatus();//这里总是2,说明前面的初始化没有成功,是因为参数无效

    GdiplusShutdown(m_pGdiToken);

    return 0;
}
2010-1-16 15:33
0
雪    币: 8599
活跃值: (5065)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
Thumbs.db 是不是结构化存储的?
2010-10-15 15:00
0
雪    币: 446
活跃值: (723)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
4
STATSTG fileInfo;
ULARGE_INTEGER dwPos;
LARGE_INTEGER lSeek = {0};
lSeek.QuadPart = 12;

pStream->Stat(&fileInfo, 0);
pStream->Seek(lSeek, STREAM_SEEK_SET, &dwPos); // 移动12个字节后才是图像数据
            
ULONG count;
ULONG size = (ULONG)fileInfo.cbSize.QuadPart-12;
HGLOBAL hBmpData = GlobalAlloc(GMEM_FIXED, size);
pStream->Read((LPBYTE)hBmpData, size, &count);

CreateStreamOnHGlobal(hBmpData, TRUE, &pStream1);
Bitmap bitmap(pStream1);
sta = bitmap.GetLastStatus();
2010-10-15 17:51
0
雪    币: 446
活跃值: (723)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
5
你的COM对象用完后要Release
2010-10-15 18:03
0
游客
登录 | 注册 方可回帖
返回
//