回答編集履歴
1
サンプルコード追加
answer
CHANGED
@@ -7,4 +7,22 @@
|
|
7
7
|
`CImage::Load(IStream* pStream)`はストリームからの読み込みです。
|
8
8
|
というわけで、`IStream`をメモリ上から生成してやれば読み込めます。
|
9
9
|
|
10
|
-
`IStream`は[`GlobalAlloc`](https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-globalalloc)でメモリ確保して得られたハンドルに対して[`CreateStreamOnHGlobal`](https://docs.microsoft.com/en-us/windows/win32/api/combaseapi/nf-combaseapi-createstreamonhglobal)を呼ぶと生成できます。
|
10
|
+
`IStream`は[`GlobalAlloc`](https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-globalalloc)でメモリ確保して得られたハンドルに対して[`CreateStreamOnHGlobal`](https://docs.microsoft.com/en-us/windows/win32/api/combaseapi/nf-combaseapi-createstreamonhglobal)を呼ぶと生成できます。
|
11
|
+
|
12
|
+
(追記)
|
13
|
+
以下のコードでメモリ上のPNGデータをCImageに読み込めることを確認しました。
|
14
|
+
エラーチェックは省いています。
|
15
|
+
```C++
|
16
|
+
IStream* pIstream = NULL;
|
17
|
+
//IStream生成
|
18
|
+
CreateStreamOnHGlobal(NULL, TRUE, &pIstream);
|
19
|
+
//PNGデータ書き込み
|
20
|
+
pIstream->Write(PNGデータポインタ, PNGデータサイズ, NULL);
|
21
|
+
//CImageに読み込み
|
22
|
+
CImage image;
|
23
|
+
image.Load(pIstream);
|
24
|
+
//CImageを使用した操作(例としてBMP保存)
|
25
|
+
image.Save(_T("c:\tmp\test.bmp"), Gdiplus::ImageFormatBMP);
|
26
|
+
//IStream解放
|
27
|
+
pIstream->Release();
|
28
|
+
```
|