キーボードのPrintScreenキーと同じようにデスクトップ上の画面を取込み、
(できれば、座標・サイズも指定できる。)
その画像をビットマップデータとして張りつけるプログラムはご存知でしょうか?
デスクトップのコンパチブルデバイスコンテキストを作成し
StretchBltとかでいけますよ。
#すげぇ説明へたくそですね。。。
サンプルプログラムを用意してくださると助かるのですが…。
以下のAPIを検索エンジンでひっかければ
サンプルも見つかるのではないでしょうか。
GetWindowDC
ReleaseDC
GetDesktopWindow
CreateCompatibleBitmap
CreateCompatibleDC
SelectObject
DeleteObject
BitBlt
StretchBlt
GetDC(NULL):
でデスクトップのDCを取得し、
CreateCompatibleDC()とCreateCompatibleBitmap()
で取得するのが宜しいかと思います。
皆様、ありがとうございます。
お蔭様でとりあえず、次のようなソースでできました。
本当に感謝しています。
COLORREF color;
CPaintDC dc(this); // 描画用のデバイス コンテキスト
// デスクトップを取る
CWnd* pwndDeskTop = GetDesktopWindow();
CDC* pDeskTopDC = pwndDeskTop->GetDC();
// 自分の領域にデスクトップからコピー
dc.BitBlt( 0,0, 200, 200, pDeskTopDC, 0, 0, SRCCOPY );
pwndDeskTop->ReleaseDC(pDeskTopDC);
この後に、
for(j=0;j<yh;j++)
for(i=0;i<xw;i++){
color=pDC->GetPixel(x0+i,y0+j);
r=GetRValue(color);
g=GetGValue(color);
b=GetBValue(color);
c=(r+g+b)/3;
pDC->SetPixel(x1+i,y0+j,RGB(c,c,c));
}
のような操作で白黒化を試したのですが、
1度ワークスペースに描写してからGetPixelでは
無駄な処理(ワークスペース内に描写)があって効率が悪い気がします。
デスクトップ上から直接RGB値をとりこみ、メモリ上で処理(この場合は白黒化)、
その後にワークスペース内に描写させるにはどうすれば良いのでしょうか?
質問ばかりですいません。
CreateCompatibleBitmap
を調べたら幸せになれるかも。。。
二色化、またはそれに準ずる処理を行うのであれば
CreateBitmapまたはCreateDIBSectionを調べてみてください。
> c=(r+g+b)/3;
ちなみに、白黒化の計算式が間違ってます。ご参考まで。
最終的にはいろいろな処理をしたいので、2値化だけといった
特定の処理ではなく、幅広い処理をできるように考えております。
なお、調べてもいまいちよくわかりませんでした。
引き続き調べていこうと思います。
>いもちぃさん
・・・r*0.3+g*0.59+b*0.11のことですか?
(r+g+b)/3でも「間違っている」とは言えないと思うのですが。
>>いもちぃさん
>・・・r*0.3+g*0.59+b*0.11のことですか?
>(r+g+b)/3でも「間違っている」とは言えないと思うのですが。
確かにグレースケールの定義は三原色が同値である。
ってことなので、(r+g+b)/3でも「間違っている」とは
いえないかと思います。
でも(r+g+b)/3だと色々問題ありますけどね(^^;
CreateDIBSectionはhBmpを作成し、
そのピクセル列に直接アクセスできるポインタも
同時に取得できるAPIです。
こいつをデバイスに割り当ててデスクトップの画像を
BitBltすればピクセル列として取得できます。
コードみてなかったんであれだったんですが
グレースケール化にしてたんですね・・・。
白黒(二色)ビットマップの場合しかCreateBitmapは使えないです。
ちなみに、CBITMAPを使うのであればGetBitmapBitsでもいいと思います。
>>いもちぃさん
>・・・r*0.3+g*0.59+b*0.11のことですか?
>(r+g+b)/3でも「間違っている」とは言えないと思うのですが。
そんなに厳密なお話なら、白黒化は、白か黒、
グレースケールなら、諧調を持った灰色と白と黒ですね。
白黒テレビも間違いってことになりますね。
もしわかってないときの参考に、とぴちゅうさんのことを思った書き込みに、
「「間違っている」とはいえない」ではなく、せめて
「一般的な白黒化ではないのです」くらいにしておいたほうが、
問題がないかと。
こういった掲示板では、「ご参考まで」など、心を汲んでいただきたい。
書き忘れ。
上の発言に対するお返事は不要です。論議を呼びたいのではなく、単に
意見を述べたまでですので、聞き流しておいて下さい。
※ゴミです、すみません。
ツイート | ![]() |