2018-06

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

環境依存?

Wao.jpg

スクリーンをキャプチャして、その情報をJpeg保存する関数(フリーのライブラリを使用)を作っていたときにちょっと行き詰った。

開発環境があるPCでは正常に動くが開発環境が入ってないPCではメモリエラーとなってしまうのである。 『**.dllを参照できません』というような警告がでた時は開発環境にしかないdllなので、その足りないDLLを配布してやればよかったのだが、どうもこれはそのパターンではなかった。

保存用のバッファimgBufにスクリーンの画像情報が入ったバッファlpBufをコピーしてやればいいので下記のようなコードを書いたがこれだと実行環境によってメモリエラーとなってしまった。
/*直接画像情報を取得*/
imgBuf++ *imgBuf++ = (BYTE)(*(m_buffer + (x + 18) * 3 + 2 + y * m_length)); //R成分
imgBuf++ *imgBuf++ = (BYTE)(*(m_buffer + (x + 18) * 3 + 1 + y * m_length)); //G成分
imgBuf++ *imgBuf++ = (BYTE)(*(m_buffer + (x + 18) * 3 + 0 + y * m_length)); //B成分

しかし、これを以下のようにしてPixelGetというスクリーンの画像情報を取得できる関数を作ってやったら、エラー落ちもなく動作した。

TRGB pixel; //ピクセルのRGB成分が入る共用体
pixel.RGB = PixelGet(lpBuf, x, y, dwLength);//関数を介して画像情報を取得
*imgBuf++ = pixel.R; //R成分
*imgBuf++ = pixel.G; //G成分
*imgBuf++ = pixel.B; //B成分

DWORD PixelGet(LPBYTE m_buffer, int x, int y ,int m_length)
{
TRGB pixel;//ピクセルのRGB成分が入る共用体
pixel.R = (BYTE)(*(m_buffer + (x + 18) * 3 + 2 + y * m_length));
pixel.G = (BYTE)(*(m_buffer + (x + 18) * 3 + 1 + y * m_length));
pixel.B = (BYTE)(*(m_buffer + (x + 18) * 3 + 0 + y * m_length));
return pixel.RGB;//画像の(x,y)座標にあるRGB成分を返す
}

関数を介しただけでやってることは同じだと思うのだけど…。
一体何がちがうのだろう??
開発環境が入ってるPCだと正常に動くのも謎だ…。

画像はJpeg保存関数を作っている際にJpeg変換に失敗した物のひとつ
色が変になって左右対称にw(本当は上下も逆↓↑)
スポンサーサイト

コメント

差押の対処マニュアル

差押の検索サイト。参加、預金、年金、給与、差押命令など差押に関する各種情報をお届けしています。 http://garment.tallmadgetitans.com/

睡眠障害と30代,40代の転職

睡眠障害とは、いわゆる「不眠症」のことで、十分な睡眠が取れず、精神などに不調をきたす病気のことをいう http://marasmus.rcrane4law.com/

コメントの投稿


管理者にだけ表示を許可する

トラックバック

http://gariox.blog42.fc2.com/tb.php/94-1d0b0fdc
この記事にトラックバックする(FC2ブログユーザー)

«  | HOME |  »

プロフィール

gariox

Author:gariox
全然みえないがサラリーマン
仕事ではプログラムは一切書かない日曜プログラマ
いつも釣りかプログラム書くか迷います。

プログラムダウンロード

サイトが完成!オープン♪

チャットアプリ『TatiChat』

FC2カウンター

カテゴリー

最近の記事

最近のコメント

最近のトラックバック

ブロとも申請フォーム

この人とブロともになる

ブログ内検索

RSSフィード

リンク

このブログをリンクに追加する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。