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も見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
CImage GetBitsメソッドについて
C言語・C++・C#
-
CStaticコントロールの静的イメージ描画
C言語・C++・C#
-
CImageクラスの使用について
C言語・C++・C#
-
-
4
MFCでのBITMAP作成について
C言語・C++・C#
-
5
MFCでOnPaintのタイミング
C言語・C++・C#
-
6
画面を強制的に再描画させる方法
C言語・C++・C#
-
7
【MFC】Version情報の取得
C言語・C++・C#
-
8
MFCで画像を表示させているのですが、透過表示する方法がわかりません。
C言語・C++・C#
-
9
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
10
PictureControlのハンドルをCImageで取得
C言語・C++・C#
-
11
bitmap画像の保存がうまくいきません。
C言語・C++・C#
-
12
カラープレーンってなんですか?
C言語・C++・C#
-
13
ダイアログ内コントロールの位置取得について
C言語・C++・C#
-
14
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
15
デバイスコンテキストに書いた絵をBMPファイルに落としたいです。
C言語・C++・C#
-
16
リストコントロール(MFC or API)の最後尾にアイテムを追加するには?
C言語・C++・C#
-
17
CImageのファイル名を指定して保存
C言語・C++・C#
-
18
ビットマップに描画をしてピクチャーコントロールに貼り付けるためには?
C言語・C++・C#
-
19
VC++プログラムをつかったBMP画像の拡大縮小について
C言語・C++・C#
-
20
CStringの文字列検索&抜き出しについて
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バイト型のデータを16進表記で...
-
Cで2次元配列にCSVファイルを...
-
テキストファイルを後ろから読...
-
VBSにてCSV読み込みし比較
-
VBAでテキストファイルの改行を...
-
C言語でのファイル読み込み
-
掲示板の編集機能
-
DXFファイルをVBで取り込み、図...
-
fread関数の使い方がわかりませ...
-
[VBS] 16進数でバイナリファイ...
-
バイナリデータの書き換え
-
数値から画像を作りたい
-
ファイルのアクセス回数について
-
エクセルのプロパティーでセキ...
-
バッチファイル 二つ上のディ...
-
エクセルで複数のコメントのサ...
-
現在のブックを閉じないで、マ...
-
エクセルvbaでdocuworksprinter...
-
バッチファイル XCOPYで上書き...
-
A列に記載されているフォルダ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バイト型のデータを16進表記で...
-
VBAでテキストファイルの改行を...
-
テキストファイルを後ろから読...
-
VBAでテキストファイルを複数開...
-
バイナリファイルでOutOfMemory...
-
DXFファイルをVBで取り込み、図...
-
RGBのバイナリデータをCImageに...
-
CFileの使い方を教えてください
-
datagridviewでドラッグ操作が...
-
Excel VBAで画像解析
-
バイナリの読み込みから出力まで
-
bmpファイルの明暗の数値化の方法
-
fread関数の使い方がわかりませ...
-
SDKにて。
-
日本語を配列に収め、そして表...
-
バイナリ出力
-
VBSにてCSV読み込みし比較
-
ファイル内の(&H0A)を(&H0D0A)...
-
Cで2次元配列にCSVファイルを...
-
日本語混じりのファイルをラン...
おすすめ情報