A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
No.3に引用したコードだとImgData[pnt]の先頭バイトをそのまま3回コピーしてますよね。
ImgDataも32ビットマップデータということですから、ImgData[pnt]から始まる32ビット=4バイト(または4バイト目は省略して3バイト)をコピーする必要があるのではないでしょうか?
for( int j=0 ; j<pBitmap->Height; j++ ){
Byte *rgb = (Byte *)pBitmap->ScanLine[j];
for(int i=0;i<pBitmap->Width;i++){
int pnt = j * pBitmap->Width + i;//pntはintですね?
memcpy( &rgb[i*4], &ImgData[pnt], 3 );//コピーするのは3バイトにしてます
}
}
ImgDataが配列またはポインタならポインタ演算を使ったほうがすっきりするかもしれません。
for( int j=0 ; j<pBitmap->Height; j++ ){
Byte *rgb = (Byte *)pBitmap->ScanLine[j];
Byte *src = (Byte *)(ImgData + j * pBitmap->Width);
for(int i=0;i<pBitmap->Width;i++){
memcpy( rgb, src, 3 );
rgb+=4, src+=4;
}
}
あと、蛇足ですが、効率を考えるならpBitmapはフォームメンバにするかして一度だけnew/deleteするようにしたほうがいいですね。
以上ImgDataほかの詳細が分からないのであまり自信がありません。
No.3
- 回答日時:
No.1の補足に関して
ぱっと見で仔細に検討してないのですが、
rgb[i*4+2] = (Byte)ImgData[pnt];
rgb[i*4+1] = (Byte)ImgData[pnt];
rgb[i*4+0] = (Byte)ImgData[pnt];
これでかまわないのですか?
この回答への補足
画像データ処理については新参者であり思考錯誤しておるところでもあります。
いろいろネットで調べサンプルを試してますが
この辺のデータコンバートに問題ありでしょうか
No.1
- 回答日時:
TImageへの書き込みはかなりのオーバーヘッドが生じます。
とりあえず書込み用のTBitmapを用意して、そこに画面1枚書込んだところでTImageに反映させるようにしてみて下さい。
それだけであるていど改善されると思います。
この回答への補足
TBitmapを用意しScanLineへ書き込みTImageに反映させてみました。
カメラの移動に対しスムーズに反応はしてますが、表示画像全体がグレーの網掛けになっています。
取り込む画像データ( ImgData[ ] )は、32bitsビットマップデータのデータ部と同じ形式です。
データの扱いに問題ありでしょうか?
Graphics::TBitmap *pBitmap;
pBitmap = new Graphics::TBitmap();
pBitmap->Width = 680;
pBitmap->Height = 512;
pBitmap->PixelFormat = pf32bit;
for( int j=0 ; j<pBitmap->Height; j++ ){
Byte *rgb = (Byte *)pBitmap->ScanLine[j];
for(int i=0;i<pBitmap->Width;i++){
pnt = j * pBitmap->Width + i;
rgb[i*4+2] = (Byte)ImgData[pnt];
rgb[i*4+1] = (Byte)ImgData[pnt];
rgb[i*4+0] = (Byte)ImgData[pnt];
}
}
pImage->Canvas->Draw( 0 , 0 , pBitmap );
pImage->Refresh();
delete pBitmap;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルマクロでアニメを作る方法を教えてください。 1 2023/02/07 14:27
- フリーソフト GIMPの使い方 1 2022/07/11 13:52
- Windows 8 Route Generator の使い方 1 2023/05/03 00:36
- 防犯カメラ・監視カメラ・小型カメラ Windowsのカメラ機能。設定した通りのfpsでの撮影ができず、コマ落ち動画になる。修正するには? 2 2023/01/29 09:50
- Windows 10 Windows10の画像ファイルのサムネールがアイコン表示になってしまいました。 3 2022/07/09 13:01
- デザイン タブレットパソコンについて。 3 2022/10/22 15:19
- WordPress(ワードプレス) 【Wordpress】headerの上に文字 4 2022/09/11 14:52
- HTML・CSS 詳しい方に質問です。 早急に解決したいと思っています。 ポートフォリオをMacBook で作成したと 2 2023/05/12 17:40
- X(旧Twitter) ツィッターの画像表示について 1 2023/08/17 09:28
- 画像編集・動画編集・音楽編集 動画をディスク作成すると画像が乱れる。 4 2022/06/24 07:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
COBOLのCOMP形式について
-
10Mバイトて文字数に すると何...
-
UTF-8で5~6バイトになる文字コ...
-
エクセルシート名の制限を変更...
-
char str[256]の256の意味は?
-
VBでShift_JISへurlエンコード...
-
COBOL PICTUREで X,S,Vの意味
-
ピクセル,dpiから容量(バイト...
-
バイナリとBCDコード
-
VBAでShift-JISのURLエンコード
-
この関数はどのプログラミング...
-
VB6で漢字の1バイト目か2バイト...
-
C/C++の型について
-
ビットスワップとバイトスワッ...
-
バイト配列 抜き出す
-
GetWindowTextでアドレスバーか...
-
全角半角を調べるライブラリ関...
-
最大長を用意せずにバイナリデ...
-
VB.NET LeftBの代用
-
(C#)1バイトの正規表現
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
エクセルシート名の制限を変更...
-
COBOLのCOMP形式について
-
char str[256]の256の意味は?
-
バイナリとBCDコード
-
「1TB」のHDDに日本語は何字入...
-
Javaで日本語1文字のバイト数
-
バイト列とバイナリ列の違いが...
-
SQLで1バイト、2バイト混在...
-
ピクセル,dpiから容量(バイト...
-
C++ Builderで文字列をバイトに...
-
64bit対応
-
ワイド文字のバイト数が取得で...
-
UCS-2の一覧表が欲しい
-
3バイト文字(UTF-8)をprintfで...
-
VBAでShift-JISのURLエンコード
-
機種依存文字をチェックしたい。
-
ビットスワップとバイトスワッ...
-
VBSでテキストファイルの文字列...
おすすめ情報