
Visual Studio 2017 のMFCでアプリケーションを作成しています。
画像データを加工する処理があるんですが、
そこでCImageを使用しています。
CImageに自分で作成したRGBのバイナリデータをコピーする方法はありませんでしょうか。
CImage::SetPixelは一番理想的だったんですが、
かなり処理時間が掛り使えませんでした。
ネットにもCImage::SetPixel、GetPixelは処理時間が掛ると書かれていました。
BMPファイルなどであれば、CImage::Loadとか使えるんですが、
プログラム内部で作成したバイナリデータなので使えませんし、
せっかくバイナリデータであるのに
一度BMPファイル化するのも処理時間の無駄かと思いまして…。
データはunsigned char の配列で持っている状態です。
情報をお持ちのかたいらっしゃいましたら
よろしくお願い致します。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
GDIやらビットマップやら…ここン年単位で触っていないですからねぇ……。
>attachのところで例外エラーになってしまいました。
img.Attach(hbitmap);
ですよね?
hbitmapは有効なハンドルになっていますかね?
>bitmap.CreateBitmap(HSize, YSize, 1, 8, buf); ※bufにはデータが格納されているとします。
パレットデータはどこで設定しているんでしょうか?
# って必要…ですよね???
あと…Bitmapで1行のバイト数は4で割り切れるサイズ…という制限があったかと思いましたが、その辺りは大丈夫ですか?
8Bitなら…Buff[((Width + 3) & 0xFFFFFFF8) * Height]なサイズが必要だった…かと。(後ろの余る部分は0x00埋めでしたかね)
Wr5さん
>hbitmapは有効なハンドルになっていますかね?
ウォッチで確認したところ「メモリを読み取れません」と出ました…。
>パレットデータはどこで設定しているんでしょうか?
パレットデータの設定を探したのですが、
どのようにすればよいのか分かりませんでした。
CBitmapのメソッドを見て見てもそれらしい設定がありませんでした。
パレットはどのように設定すればよいのでしょうか。
申し訳ありませんが
よろしくお願い致します。
No.1
- 回答日時:
>データはunsigned char の配列で持っている状態です。
自体がどういうデータ構造なのか?
という問題はありますが……。
CBitmap::CreateBitmap()でCBitmapを作成、CImage::Attach()でアタッチすればよいのではないでしょうか?
https://dixq.net/forum/viewtopic.php?t=20192
Wr5さん
回答ありがとうございます。
RGBと書いていましたが
データは8bitの256色の画像データでした。
すみませんでした。
白黒のデータなので、
パレットは0~255のリニアなデータです。
なのでデータ部の部分をそのままR,G,Bデータとして
24bitフルカラーとして扱っていたりしていた(デバッグや実験として)ので
変な書き方をしてしまいました。
それで下記のように書いてみたんですが、
attachのところで例外エラーになってしまいました。
CImage img;
CBitmap bitmap;
unsigned char buf[HSize * YSize];
img.Create(HSize, YSize, 8);
bitmap.CreateBitmap(HSize, YSize, 1, 8, buf); ※bufにはデータが格納されているとします。
HBITMAP hbitmap = (HBITMAP)bitmap;
img.Attach(hbitmap);
img.Save(_T("test.bmp"));
ただ、
img.Create(HSize, YSize, 24);
bitmap.CreateBitmap(HSize, YSize, 3, 24, bufRGB);
と24bitとしてもエラーになってしまいました。
何処がまずいのでしょうか。
申し訳ありませんが
よろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- UNIX・Linux サーバー間のデータコピー(データ形式とデーターフォーマットの変換あり。一定間隔で処理) 2 2023/08/22 22:15
- 事務・総務 帳票類やデータがありません。法人成り。 解体業の会社で現場作業員 兼 事務員として勤めているのですが 3 2023/06/02 13:27
- フリーソフト Windowsのフリーソフト「拡張コピー」のタイムスタンプ関係の仕様は、タイムゾーンを反映しますか? 2 2022/06/21 02:58
- その他(プログラミング・Web制作) uwscとWinShotを使いスクリーンショットを撮る 1 2022/06/30 21:15
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Excel(エクセル) エクセルデータ。容量を減らすにはどうしたらいい? 11 2022/12/22 09:01
- Visual Basic(VBA) エクセルVBA コードが同じでもファイルによって処理速度が大きく変わるのはなぜ 5 2022/11/06 21:34
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
- Visual Basic(VBA) Access VBAから使用したExcelプロセスを閉じる方法について 4 2022/06/08 17:50
このQ&Aを見た人はこんなQ&Aも見ています
-
CImage GetBitsメソッドについて
C言語・C++・C#
-
CImageクラスの使用について
C言語・C++・C#
-
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
-
4
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
5
CStaticコントロールの静的イメージ描画
C言語・C++・C#
-
6
CImageのファイル名を指定して保存
C言語・C++・C#
-
7
CStringの文字列検索&抜き出しについて
C言語・C++・C#
-
8
画面を強制的に再描画させる方法
C言語・C++・C#
-
9
カラープレーンってなんですか?
C言語・C++・C#
-
10
MFCで画像を表示させているのですが、透過表示する方法がわかりません。
C言語・C++・C#
-
11
CStringをwchar_tに変換したい
C言語・C++・C#
-
12
【MFC】Version情報の取得
C言語・C++・C#
-
13
CString から LPCTSTRの型に変換
C言語・C++・C#
-
14
VS2010 MFC CStdioFileについて
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイル入力のデータを構造体...
-
バイナリファイルの一部分をカ...
-
VBScriptの配列は、要素数を指...
-
CSVファイルによる検索の高速化
-
バイト型のデータを16進表記で...
-
日本語を配列に収め、そして表...
-
Cで2次元配列にCSVファイルを...
-
エクセルのプロパティーでセキ...
-
エクセルvbaでdocuworksprinter...
-
エクセルで複数のコメントのサ...
-
ExcelブックをGoogleスプレッド...
-
ExcelのVBAで上書き保存を確...
-
エクセルVBAで一つ上の階層...
-
カンマ区切りのCSVファイルから...
-
Excel csv保存 列数が異なる場...
-
Excel 相対パス
-
Wordで差込印刷した後に別々の...
-
実行ファイルのパスを取得したい
-
エクセルのマクロで特定フォル...
-
Vba初心者です。下記のコード助...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バイト型のデータを16進表記で...
-
バイナリファイルの一部分をカ...
-
バイナリファイルでOutOfMemory...
-
DXFファイルをVBで取り込み、図...
-
Cで2次元配列にCSVファイルを...
-
配列操作について
-
日本語を配列に収め、そして表...
-
VBScriptの配列は、要素数を指...
-
テキストファイルを後ろから読...
-
CSVファイルによる検索の高速化
-
グレースケール画像の画素値を得る
-
ファイルをメモリに出力する方法
-
RGBのバイナリデータをCImageに...
-
C++による ファイルの読み込み
-
日本語混じりのファイルをラン...
-
VBAでテキストファイルの改行を...
-
VBでバイナリファイルのコピー...
-
[VBS] 16進数でバイナリファイ...
-
C言語でのファイル読み込み
-
Unicodeのファイル読み込みがう...
おすすめ情報