GDI +にはImageクラスが用意されています。このクラスを使用すると、1つの形式のイメージファイルを読み取り、このファイルを別の形式で保存できます。しかし、JPEGファイル(すでにメモリにロードされている)をデコードしたいのであれば、どうすればいいですか?GDI +ライブラリを使用してメモリ内のjpegをデコードする方法は?
2
A
答えて
1
あなたはbuf
をJPEGデータ(または他の任意の互換性のある画像フォーマット)を含み、bufsize
は、そのデータの長さSHCreateMemStream
とGdiplus::Image::FromStream
#include <Window.h>
#include <Gdiplus.h>
#include <Shlwapi.h>
#include <atlbase.h>
...
CComPtr<IStream> stream;
stream.Attach(SHCreateMemStream(buf, bufsize));
Gdiplus::Image *image = Gdiplus::Image::FromStream(stream);
を使用することができます。
SHCreateMemStream
が必要です。"Shlwapi.lib"
ライブラリです。
例:
void foo(HDC hdc)
{
//Read jpeg from input file in to buf:
HANDLE hfile = CreateFile(L"test.jpg",
GENERIC_READ, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (!hfile) return;
DWORD bufsize = GetFileSize(hfile, NULL);
BYTE *buf = new BYTE[bufsize];
DWORD temp;
ReadFile(hfile, buf, bufsize, &temp, 0);
//convert buf to IStream
CComPtr<IStream> stream;
stream.Attach(SHCreateMemStream(buf, bufsize));
//Read from IStream
Gdiplus::Bitmap *image = Gdiplus::Bitmap::FromStream(stream);
if (image)
{
Gdiplus::Graphics g(hdc);
g.DrawImage(image, 0, 0);
delete image;
}
delete[]buf;
CloseHandle(hfile);
}
編集:コメントで述べたように簡単方法:
IStream* stream = SHCreateMemStream(buf, bufsize);
Gdiplus::Image *image = Gdiplus::Image::FromStream(stream);
...
stream->Release();
関連する問題
- 1. メモリからjpegのサイズを取得する(GDI ++で変換)
- 2. メモリ内のGDI + DCは常にモノクローム
- 3. PHPを使用してJSON形式をデコードする方法は?
- 4. Silverlightを使用してメモリ内のオブジェクトのサイズを計算する方法は?
- 5. JavaでZXingライブラリを使用してカラー画像をデコードする
- 6. JPEG画像を短時間でデコードする方法
- 7. Imebraライブラリを使用してjpegからdicomイメージを変換/作成する方法は?
- 8. かわいいエディタとGDI +を使ってリッチテキストのjpegイメージをオーバーレイする
- 9. GDI + PNGイメージを使用してFPSドロップを修正する方法は?
- 10. PHPを使用してメモリ内に共有オブジェクトを作成する方法は?
- 11. C#:GDI +:ビットマップの保存方法を使用してイメージを上書きする
- 12. Cでzlibライブラリを使用してwebsocket permessage-deflateをエンコードおよびデコードする方法は?
- 13. PHPを使用してJSONデータをフェッチしてデコードする方法は?
- 14. GDI +を使用してC#でコントロールを使用してGraphicのオブジェクトを取得する方法?
- 15. 組み込みCを使用して、STM32F2シリーズマイクロコントローラの内蔵フラッシュにraw jpegイメージを保存する方法は?
- 16. sparklyrを使用してDataFramesのメモリ使用量を表示する方法は?
- 17. Javaを使用して.bmp/.jpegイメージを開く方法
- 18. ライブラリ内のandroidデータバインディングの使用方法
- 19. フラグメント内で外部ライブラリを使用する方法は?
- 20. LEADTOOLSを使用してメモリバッファ内のJPEGに画像エフェクトを適用する方法
- 21. コマンドラインツールsqlite3を使用してメモリ内SQLiteデータベースをブラウズする方法
- 22. 共有ライブラリを使用してファイルをコンパイルする方法は?
- 23. Pythonを使用してQRコードをエンコードおよびデコードするためのライブラリ
- 24. ユニコードHTMLをJavaScriptでデコードする方法は?デコードするためにJavaScriptを使用して
- 25. PHPを使用しているときにHTMLエンティティをデコードする方法は?
- 26. すべての16 GBメモリを使用したApache、プロセスとメモリ使用量を制限する方法は?
- 27. EASTLを使用してメモリ使用量を追跡する方法は?
- 28. バイトの内容を識別する方法[]はjpegですか?
- 29. JPEG操作とドットネット - GDI +例外
- 30. C++でGDI +を使用してイメージファイルタイプを取得するには?
あなたがメモリにJPEGファイルをデコードする代わりに、WIC(Windowsイメージングコンポーネント)を使用することはできません任意の理由は? [いくつかのスターターサンプルへのリンクがあります。](https://msdn.microsoft.com/en-us/library/windows/desktop/ee720055(v = vs.85).aspx) –
アドバイスをいただき、ありがとうございますWICを見てください。 – gylns