![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
開発環境はVC++/CLIです。
アンマネージ型のCOMオブジェクトの扱いで困っております。
JPEGやPNGなどの画像データを保存したunsigned char型配列から、Gdiplus::Bitmap型を作ろうとしています。
unsigned int imagesize; // 画像のバイト数が格納されている
array<unsigned char>^ image = gcnew array<unsigned char>(imagesize); //画像のデータが格納されている
事前にこのようなデータを用意し、以下のように記述しました。
HGLOBAL hResourceBuffer = GlobalAlloc(GMEM_MOVEABLE , imagesize);
void* pResourceBuffer = GlobalLock(hResourceBuffer);
CopyMemory(pResourceBuffer, &image, imagesize);
IStream* pIStream = NULL;
CreateStreamOnHGlobal(hResourceBuffer, TRUE, &pIStream)
data->bmp = new Gdiplus::Bitmap(pIStream);
pIStream->Release();
GlobalUnlock(hResourceBuffer);
GlobalFree(hResourceBuffer);
しかしながら、上記のコードだと、CopyMemory時に「保護されたメモリに書き込もうとした」といったエラーが発生します。
Webで色々検索しましたが、全て似たような記述で動作していました。
何が問題なのでしょうか?
尚、上記と同様の画像データ配列を使って、System::Drawing::Bitmap型に格納したとき、画像が正常に表示されることを確認しております。
画像のバイト数に於いても取得したデータに間違いはなく、やはりメモリ関連の問題だと思うのですが…。
MemoryStream^ memst = gcnew MemoryStream(image);
Bitmap^ bmp = gcnew Bitmap(memst);
memst->Close();
Graphics^ im = pictureBox1->CreateGraphics();
im->DrawImage(bmp, 0, 0, 100, 100);
delete bmp;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- C言語・C++・C# C言語の質問です。バイナリ形式で保存されたWindows Bitmap形式の画像ファイルを読み込み、 3 2023/07/19 14:58
- 生物学 脳の記録部位の集計方法について 1 2022/06/11 21:26
- 格安スマホ・SIMフリースマホ 格安SIMカードについて。イオンモバイルの月のデータを使い切った後、ものすごくスピードが遅いです。L 6 2023/02/09 06:56
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- Visual Basic(VBA) 【VBA】Excelの特定範囲のセルを画像で保存したい 2 2023/01/25 13:06
- フリーソフト DVDshrink メモリリソースが足りません。 1 2022/08/16 23:17
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のmemcpy関数について質問...
-
C言語:小文字を大文字に変換す...
-
char型の文字列をウィンドウに...
-
C言語のintとcharの違いってな...
-
char型について【初心者です】
-
GDIによるメモリ上からの画像デ...
-
ポインタで詰まりました;
-
文字列の途中から途中までを抽出
-
const char* s1とただのchar s1...
-
プログラムの中身の意味
-
エクセルのMID関数は、C言語では?
-
C言語で文字列置き換え
-
C言語のプログラムについてです
-
関数から配列を返すには?
-
リッチテキストボックスの中身...
-
クイックソートの比較交換回数...
-
C言語 配列の長さの上限
-
2次元配列を確保したいのですが、
-
%dなどの違い
-
セグメントエラー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
char*を初期化したいのですが
-
CStringからchar*への型変換に...
-
C言語のintとcharの違いってな...
-
C言語にて構造体のメンバがNULL...
-
小数点入りの文字列をfloat型に...
-
strcat関数を自作したいです
-
C言語のプログラムについてです
-
DWORDとcharの変換
-
const char* s1とただのchar s1...
-
char型にint型の数値を代入する。
-
文字列の途中から途中までを抽出
-
new charとnew char[N]の違いは?
-
文字列内の数字削除
-
char 文字列型 の表現範囲が-12...
-
fgetc( )の戻り値はなぜ整数??
-
csvファイルをfscanfで読み込む...
-
fstream型オブジェクトを関数の...
-
エクセルのMID関数は、C言語では?
-
ポインタを使って回文かどうか...
-
ポインタ配列
おすすめ情報