- 1 名前:デフォルトの名無しさん mailto:sage [03/06/05 20:40]
- 初心者にはやっぱり難しいWindowsプログラミング。
そこでこの本を買った人も多いのではないでしょうか。 それでもわからない事がたくさんある! そんな時はここで質問しましょう。 本家サイト ttp://www.kumei.ne.jp/c_lang/index.html
- 447 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 19:20:09 ]
- 24ビットカラーのBMPを16ビットカラーに減色するプログラムを書いていたのですが
24ビットカラーBMPの各色を取ってB&0x1F、G&0x2F、R&1Fをあてて各色を減色し R<<11 | G<<5 |Bっていった感じに繋げてみたのですがどうにもうまくいきません。 何か参考になるサイトや書籍、ヒント等いただけないでしょうか・・・。
- 448 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 20:57:02 ]
- >447
> 24ビットカラーBMPの各色を取ってB&0x1F、G&0x2F、R&1Fをあてて各色を減色し 本当にこの通りなら減色してなくね? 128, 128, 128 を 5 bit, 6 bit, 5 bit に縮めるなら 16, 32, 16 になるべきだと思わないかい? 今だと 0, 0, 0 になるよ? 単純にやるにしてもマスクじゃなくてビットシフトだと思う。 減色自体は画像処理定番だからぐぐれば腐るほどヒットすると思うが。
- 449 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 21:04:33 ]
- >>448
24ビットカラーは各色8bitだから256*256*256だぞ・・・128ビットって各色4ビットで12bitになっちまうじゃねーか・・・
- 450 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 23:38:14 ]
- > B&0x1F、G&0x2F、R&1F
ちょ・・・ったく、もう。 たとえば赤を例にとって 8びっと=0〜255 5びっと=0〜31 0〜255の値を取りうる数値を単純に31で頭打ちしちゃダメだろ。 R=R×32÷256 つまり0.125倍に圧縮しなきゃダメだろ。頭打ちじゃ無くて圧縮ね! インチをミリにしたり、ポンドをグラムにしたりするのと考え方は同じだよ〜 緑は6びっとだから後は自分で考えろ。 あと、G&0x2F も間違ってる。もういっぺん2進数、16進数を最初から勉強しなおせ。 これじゃ自転車に乗れないのにバイクの免許を取ろうとしてるのと同じ。無謀だよ。
- 451 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 01:01:19 ]
- >>450
0x3Fって後カラから気がついて問題そこじゃないからいっかと。
- 452 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 01:36:11 ]
- >>450
知り合いに、自転車乗れないベテランライダーがいるぞ。 自分で漕ぐときの動的バランス感覚がないらしい。
- 453 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 12:51:18 ]
- >>447
下位のビットじゃなくて上位のビットを使おう R >>= 3; G >>= 2; B >>= 3; R<<11 | G<<5 | B;
- 454 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 00:11:40 ]
- 猫でもわかるWindowsプログラミング第3版の5.2タイピングソフトのプログラムって、
本の通り書くと「タイプミス!」にならないんですが、これは本が間違ってるんでしょうか? もし間違えているなら、どこが間違っているのか教えていただけると助かります。
- 455 名前:デフォルトの名無しさん [2009/09/19(土) 14:39:54 ]
- おねがいします
- 456 名前:ぅゅ ◆e6.oHu1j.o mailto:sage [2009/09/19(土) 14:45:46 ]
- ソースうp
第二版にはタイピングゲームは載っていない
- 457 名前:454 mailto:sage [2009/09/19(土) 15:20:24 ]
- ウィンドウプロージャ部のみですが、
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { HDC hdc; PAINTSTRUCT ps; MMTIME mm; switch (msg) { case WM_CREATE: srand((unsigned)time(NULL)); break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); TextOut(hdc, 0, 0, szMondai, lstrlen(szMondai)); TextOut(hdc, 0, 40, szInput, lstrlen(szInput)); if(bSeikai) SetTextColor(hdc, RGB(0,0,0)); else SetTextColor(hdc, RGB(255,0,0)); TextOut(hdc,0,80,szCheck,lstrlen(szCheck)); EndPaint(hWnd, &ps); break;
- 458 名前:454 mailto:sage [2009/09/19(土) 15:21:05 ]
- case WM_CHAR:
if(wp == VK_SPACE && !bStart) { bStart = TRUE; TypeStart(hWnd); break; } if(bStart == FALSE) return DefWindowProc(hWnd, msg, wp, lp); if(wp == VK_ESCAPE) { lstrcpy(szMondai, TEXT("")); lstrcpy(szInput, TEXT("")); lstrcpy(szCheck, TEXT("")); InvalidateRect(hWnd, NULL, TRUE); bStart = FALSE; break; } wsprintf(szInput, TEXT("あなたの入力=\"%c\""), (int)wp); if(szMondai[6] == szInput[14]) { bSeikai = TRUE; mm.wType = TIME_MS; timeGetSystemTime(&mm, sizeof(MMTIME)); dwEnd = mm.u.ms; wsprintf(szCheck, TEXT("反応時間[%dミリ秒]"), dwEnd - dwStart); TypeStart(hWnd); } else { bSeikai = FALSE; MessageBeep(MB_OK); lstrcpy(szCheck, TEXT("タイプミス!")); } InvalidateRect(hWnd, NULL, TRUE); break;
- 459 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 15:21:46 ]
- case WM_DESTROY:
PostQuitMessage(0); break; default: return (DefWindowProc(hWnd, msg, wp,lp)); } return 0; } int TypeStart(HWND hWnd) { int n; MMTIME mm; n = rand() % 26; wsprintf(szMondai, TEXT("問題=\"%c\""), 'a' + n); mm.wType = TIME_MS; timeGetSystemTime(&mm, sizeof(MMTIME)); dwStart = mm.u.ms; InvalidateRect(hWnd, NULL, TRUE); return 0; }
- 460 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 15:23:52 ]
- 書籍に乗ってるソースコードの転載はまずいだろ
- 461 名前:デフォルトの名無しさん [2009/09/19(土) 15:44:38 ]
- 流れからいって微妙w
- 462 名前:ぅゅ ◆e6.oHu1j.o mailto:sage [2009/09/19(土) 16:22:32 ]
- 何事もなく動いた
www.geocities.jp/c_zelos/file_up2/nekotype.cpp
- 463 名前:ぅゅ ◆e6.oHu1j.o mailto:sage [2009/09/19(土) 16:40:06 ]
- 追記:
もしかしたら 動かないんじゃなくて、スペースキーー押して開始させてないんじゃね(と思った 90行目あたりの case WM_CHAR: if(wp == VK_SPACE && !bStart) { bStart = TRUE; TypeStart(hWnd); break; } if(bStart == FALSE) return DefWindowProc(hWnd, msg, wp, lp); これ プログラム起動したらまずスペースキー押して bStart == TUREにしておかないと return DefWindowProc(hWnd, msg, wp, lp); が実行されてそれ以下の処理が通らなくなってる
- 464 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 00:27:05 ]
- >>462
そのままコピペしてやってみたんですが、動きませんでした。 #include<time.h>などを追加してエラーなくしてみましたが、 ウィンドウにszMondai、szInput、赤字でszCheckと表示され、 スペースを押すと問題があるので終了しますとなって終了してしまいました。 >>463 スペースキー押しての開始はもちろんしてますよ。 ただ、間違えたキーを押してもタイプミス!がでないんですよね・・・ デバッグしてもif文の分岐で、間違えたときもelse(タイプミス!と表示される)の方にいかないんです。
- 465 名前:ぅゅ ◆e6.oHu1j.o mailto:sage [2009/09/20(日) 07:57:39 ]
- >>464
悪い、俺のソースは変数宣言を間違っていた char * szMondai = "szMondai"; char * szInput = "szInput"; char * szCheck = "szCheck"; を char szMondai[256]; char szInput[256]; char szCheck[256]; にすれば動く
- 466 名前:454 mailto:sage [2009/09/21(月) 18:53:17 ]
- >>464
無事できました!ありがとうございます どうやら原因は文字セットがUnicodeになっていたせいみたいでした。 マルチバイト文字セットを使ったら上手くいきました。
|

|