mixmarion の回答履歴
- ダブルバッファの作り方
画面に描画するBCC5.5 のCプログラムがあります。画面がちらつくので、ダブルバッファにしたいのですが、具体的に、どの関数を呼んで実装したらよいのかわかりません。WEB検索をしますと結構情報がヒットしますが、解決に至ってませんので、よろしくお願いします。 具体的にやったことは、現在動いているプログラムの case WM_PAINT: hdc=BeginPaint(hWnd,&ps); paint(hdc); // 自作の描画プログラム本体 ReleaseDC(hWnd,hdc); EndPaint(hWnd,&ps); break; の部分を、「画面サイズのビットマップイメージhBitmapをつくり、そこにpaint関数で描き込み、最終画面を一気に出力する」というつもりで以下のプログラムに書き換えたのですが、表示すらしなくなってしまいました。何が悪いのかお教えください。 case WM_PAINT: GetClientRect(hWnd,&rt); h = (int)rt.bottom; w = (int)rt.right; hBuffer = CreateCompatibleDC(NULL); hBitmap = CreateCompatibleBitmap(hBuffer, w, h); SelectObject(hBuffer, hBitmap); paint(hBuffer); hdc=BeginPaint(hWnd,&ps); BitBlt(hdc, 0,0,w,h, hBuffer,0,0, SRCCOPY); ReleaseDC(hWnd,hdc); EndPaint(hWnd,&ps); DeleteDC(hBuffer); DeleteObject(hBitmap); break;
- ダブルバッファの作り方
画面に描画するBCC5.5 のCプログラムがあります。画面がちらつくので、ダブルバッファにしたいのですが、具体的に、どの関数を呼んで実装したらよいのかわかりません。WEB検索をしますと結構情報がヒットしますが、解決に至ってませんので、よろしくお願いします。 具体的にやったことは、現在動いているプログラムの case WM_PAINT: hdc=BeginPaint(hWnd,&ps); paint(hdc); // 自作の描画プログラム本体 ReleaseDC(hWnd,hdc); EndPaint(hWnd,&ps); break; の部分を、「画面サイズのビットマップイメージhBitmapをつくり、そこにpaint関数で描き込み、最終画面を一気に出力する」というつもりで以下のプログラムに書き換えたのですが、表示すらしなくなってしまいました。何が悪いのかお教えください。 case WM_PAINT: GetClientRect(hWnd,&rt); h = (int)rt.bottom; w = (int)rt.right; hBuffer = CreateCompatibleDC(NULL); hBitmap = CreateCompatibleBitmap(hBuffer, w, h); SelectObject(hBuffer, hBitmap); paint(hBuffer); hdc=BeginPaint(hWnd,&ps); BitBlt(hdc, 0,0,w,h, hBuffer,0,0, SRCCOPY); ReleaseDC(hWnd,hdc); EndPaint(hWnd,&ps); DeleteDC(hBuffer); DeleteObject(hBitmap); break;
- PlgBltで画像の回転
WINAPI:PlgBltにてビットマップ画像を回転させるソフトを作成中ですが、 画像サイズが大きくなると(5000x5000Pixel)、関数の戻り値自体は成功しているのですが、結果ビットマップ画像を見てみると真っ黒になってしまい、うまくいきません。 原因と対策方法を教えて下さい。 ちなみに、画像サイズが小さいと(100x100Pixel)うまくいきます。 尚、 OS:XP SP2 開発環境:Visial Stadio6.0 です。
- 締切済み
- その他(プログラミング・開発)
- 0333
- 回答数1
- BITMAPINFOHEADERの扱いについて
Video for Windows (vfw32.lib)を使い動画処理のプログラムを作成しています。 AVIFileOpen AVIFileGetStream AVIStreamGetFrameOpen を使い BITMAPINFOHEADERを取得するまでは出来たのですが ここから、どうやって1ピクセルごとの値を操作していいものかわからず、途方にくれています。 何かいい方法をご存知の方、教えていただけないでしょうか? 環境は WinXP SP2 Microsoft Visual Studio 2005 SP1 です