hidebun の回答履歴
- openCVのトラックバーについて
OpenCV.jpのトラックバーのサンプルを使用して、トラックバーを複数個作りたいです。 サンプルにあるように2つの場合は、トラックバーと下の黒い部分が近いのですが、トラックバーを増やしていくと徐々に離れてしまいます(図)。 これは仕様でしょうか、それともプログラムで直せるものでしょうか。 分かる方、よろしくお願いします。 OpenCV.jpサンプルプログラム http://opencv.jp/sample/simple_gui.html#trackbar Cで作成しています。
- 締切済み
- C・C++・C#
- negative-X
- 回答数5
- openCVのトラックバーについて
OpenCV.jpのトラックバーのサンプルを使用して、トラックバーを複数個作りたいです。 サンプルにあるように2つの場合は、トラックバーと下の黒い部分が近いのですが、トラックバーを増やしていくと徐々に離れてしまいます(図)。 これは仕様でしょうか、それともプログラムで直せるものでしょうか。 分かる方、よろしくお願いします。 OpenCV.jpサンプルプログラム http://opencv.jp/sample/simple_gui.html#trackbar Cで作成しています。
- 締切済み
- C・C++・C#
- negative-X
- 回答数5
- 構造体メンバがポインタであるときの代入
typedef struct WRITE_BUF_TYPE{ byte adr_h; // ワードアドレス上位 byte adr_l; // ワードアドレス下位 byte *buf_adr; // 送信/受信先 アドレス byte cnt; // 文字数 }; struct W_BUF_TYPE b[10]; 構造体、データ定義を上のようにしています。 b[10]の空きを探して書き込むサブルーチンを作ったのですが、*buf_adrの設定方法がわかりません。 ご存知の方、教えてください。 サブルーチン sub_func(int8 *adr){ byte i; for(i=0;i<10;i++){ if(b[i].adr_h==0){ // b[10]の空き検索 b[i].buf_adr=*adr; // アドレスを設定する。ここでエラーとなります。 } } サブルーチンでバッファのアドレスを受けて、b[10]の空きエリアに設定するプログラムです。
- c言語でcsvファイルの処理で、処理速度が速いプログラムを書こうと思っ
c言語でcsvファイルの処理で、処理速度が速いプログラムを書こうと思っています。 以下のようなcsvファイル、件数は約10000000件以上あるものを使います shop,ymd,gend,age,area,amt 20,2008-05-01,3,5,014,128 22,2008-05-01,2,4,015,350 : 二列目の日別、つまりymd別に最後列のamdの小計を出したいんですが、組んだプログラムを実行してみると、セグメンテーション違反ですと出てしまうんです。以下のようなプログラムを組んだんですが #include <stdio.h> #include <string.h> #include <time.h> #define MM 256 int main() { FILE *fp; char str[MM],*p1, *p2,*ymd; int num, sum; clock_t start,end; start = clock(); fp = fopen("csv.csv","r"); if(fp == NULL){ printf("ファイルが開けませんでした。\n"); return(0); } sum = 0; fgets(str, sizeof(str), fp); while(fgets(str, sizeof(str), fp) != NULL){ p1 = strtok(str, ","); p1 = strtok( NULL,","); ymd = p1; p2 = strrchr(str,','); sum[ymd] = atoi(p2+1); break; } while( fgets(str, sizeof(str), fp) != NULL && p1 != NULL){ p1 = strtok(str, ","); p1 = strtok( NULL,","); p2 = strrchr(str,','); if ( p2 != NULL ) { if(ymd == p1){ sum[ymd] += atoi(p2+1); }else{ printf("%s ,%d \n",ymd,sum[ymd]); strcpy(ymd,p1); } } } printf("%s ,%d \n",p1,sum); fclose(fp); end=clock(); printf("%.2f秒\n",(double)(end-start)/CLOCKS_PER_SEC); return(0); } うまくいきません。大体、処理速度は3秒以内を目指しています。 どなたかご教授御願いいたします。
- ストップウォッチ
油圧シリンダの弁をADボードを用いて外乱(構造物の地震による揺れ)を採取し、それに対してPID制御で調節する研究をしています。この制御は、あらかじめサンプリングクロックを設定し、あるサンプリング数に達したら、その度にswitch文を用いてを制御イベントが発生するプログラムとなっています。しかし、大まかには出来たのですがサンプリング周期がまだ目標には達していなく(目標サンプリング周期1ms)、プログラムをいじっても本当に改善されているのかわかりません。 そこで、このイベントが1回発生するために要する時間を知るため、制御ソフトのダイアログ上に0.001秒オーダーのストップウォッチを付けたいと思っていますが、何か参考になるサイト等はございますか。 上述の通り、サンプリング周期が数msオーダーとなるので、0.001秒オーダーのものが必要となります。 ちなみに使用言語はVC6のMFCを使用しています。また、PC環境等は影響するのでしょうか? よろしくお願いします。
- 地図の上にL字スケールを描画
MDIフレーム上に、複数のチャイルドスタイルのダイアログが存在するプログラムを改造しました。(元は別の人間が作成) その中にMapDKIVの地図を描画しているダイアログがあり、その地図上に別のダイアログをおき、そこに縮尺L字スケールのビットマップを描画しました。(MapDKIVには、その機能がまだ無い為) 色々と試行錯誤した結果、この方法を取ったのですが、納品した矢先、お客様から、地図をマウスでドラッグして動かそうとすると、スムーズに動いたり、カクカクとしか動かなかったり、時には全く動かない事があるとのクレームがありました。(その操作以外は正常に動作している模様) 以前はこの症状はなかったとの事から、今回のL字スケール描画に原因があるのではと調べていますが、原因が見付かりません。 以下に、ソースの一部分を記載しますので、どなたか助言をお願いします。 ******** ビットマップデータ管理クラス ******** ビットマップは、スケール毎に準備 <BitmapData.h> private: CBitmap m_bmpLScale0; CBitmap m_bmpLScale2; <BitmapData.cpp> //-------- 機能 ビットマップ情報の読込 -------- void CBitmapData::Load(void) { m_bmpLScale0.LoadBitmap(IDB_BITMAP_SCALE0); // 全国図 m_bmpLScale2.LoadBitmap(IDB_BITMAP_SCALE2); // 1/160万 //-------- 機能 ビットマップ情報の取得 -------- CBitmap& CBitmapData::GetScaleBitmap(void) { UINT unIndex = GetScaleNumber();// 現在選択されているスケールレベル switch(unIndex) { case 0: return m_bmpLScale0; break; // 全国図 case 2: return m_bmpLScale2; break; // 1/160万 ******** 地図描画ダイアログ ******** L字スケール描画用ダイアログの生成 <MainMap.cpp> // 地図描画フレームサイズを取得 m_ctrlMapFrame.GetWindowRect(LPRECT(rect)); // スケールレベルをセット g_BitmapData.SetScaleNumber(m_ctrlMapZoom.GetPos()); // スケール描画用ダイアログの生成(地図フレームの左下位置を渡す) m_pMapScaleDlg = new CMapScaleDlg(); m_pMapScaleDlg->Create(m_hWnd, IDD_MAP_SCALE_DIALOG, ・・・ ******** L字スケール描画ダイアログ ******** //-------- 機能 OnInitDialog() -------- // ウインドウ拡張スタイルをレイヤード設定 lStyle = GetWindowLong( this->m_hWnd, GWL_EXSTYLE ); lStyle |= 0x00080000; SetWindowLong( this->m_hWnd, GWL_EXSTYLE, lStyle ); // レイヤードウィンドウの不透明度と透明のカラーキーを設定(青色部分を透明化する) SetLayeredWindowAttributes( this->m_hWnd, RGB(0,0,255), 100, 0x00001/*LWA_COLORKEY*/ ); //-------- 機能 OnPaint() -------- BITMAP bitmap; CBitmap& mBitmap = g_BitmapData.GetScaleBitmap(); mBitmap.GetBitmap(&bitmap); CSize sz(bitmap.bmWidth, bitmap.bmHeight); CDC dc; dc.CreateCompatibleDC(&PaintDC); CBitmap *pOld = dc.SelectObject(&mBitmap); // もともとのディバイスコンテキストにビットマップを透過で転送(青色部分を透明化する) if( ::TransparentBlt(PaintDC, 0, 0, sz.cx, sz.cy, dc, 0, 0, sz.cx, sz.cy, (UINT)RGB(0,0,255)) == FALSE ){ } // ビットマップ選択解除 dc.SelectObject( pOld); } //-------- 機能 スケール(ビットマップ)変更メッセージを受信 -------- // 現在選択されているスケール用のビットマップを取得(ポインタ) CBitmap& mBitmap = g_BitmapData.GetScaleBitmap(); mBitmap.GetBitmap(&bitmap); CSize sz(bitmap.bmWidth, bitmap.bmHeight); // メインマップダイアログの地図フレームの左下になるよう変更 this->MoveWindow(m_nMapFrameLeft, (m_nMapFrameBottom - sz.cy), sz.cx, sz.cy); // ウインドウの再描画 this->Invalidate(); 1.L字スケール描画用のダイアログを、背景青色で準備 2.L字スケール描画用のダイアログの青色部分を透明化に設定 3.L字スケール描画用のダイアログのウインドウサイズを、選択されているスケール用のビットマップと同じサイズに、且つ、地図フレームの左下に位置を設定 4.地図ダイアログからスケール変更メッセージを受信 (1) その時に選択されているスケール用のビットマップと同じサイズに、且つ、地図フレームの左下に位置を設定 (2) ウインドウの再描画 this->Invalidate() 5.OnPaint() (1) 現在選択されているスケールのビットマップ情報を取得 (2) ビットマップを透過で転送(青色部分を透明化) ビットマップのL字以外の部分は青色 以上、文字数制限の為、かなり省略していますが、大変困っています。 とにかく助言を頂きたく、よろしくお願いします。
- インポート関数をインポートしないで(ry
Visual StudioでwindowsのプログラムをC/C++作っています。 ダイナミックリンクライブラリにある関数を使うとき、その使う関数を実行ファイルに直接埋め込んでインポートしないで使うことは可能でしょうか?自分の作ったライブラリの関数ではなく用意されたものの場合です。例えばuser32.dllにある関数を使う場合などです。 回答よろしくお願いします。
- ベストアンサー
- C・C++・C#
- yozakura20
- 回答数3
- USB の通信速度計測(パフォーマンスカウンタ使用)について
こんにちは。 Windows で USB の通信速度を計測する GUI アプリを作成しています。 質問ですが、計測するにあたって USBアナライザ(LE-620HS)の結果とアプリの結果が異なっており、その理由を教えていただきたいです。 環境は、ターゲットデバイス(SH7045、M66590FP、エンドポイントバッファ512Byte)、デバイスドライバ(KMDF)、PC(WinXP SP3、Pentium D 3.19GHz、メモリ3GB)、アプリ(VC9.0 MFC)となります。 また以下に示すコードはアプリのメインスレッドではなく、データ受信を行うための、別スレッドとなります。(受信スレッド) 2048Byte のデータを Bulk IN したとき USBアナライザでは「40us」、アプリでは「400us」と 約10倍程度、差があります。 アプリの計測コードはパフォーマンスカウンタを使用しています。 LARGE_INTEGER nFreq,nBefore,nAfter; ::ZeroMemory( &nFreq, sizeof( nFreq ) ); ::ZeroMemory( &nBefore, sizeof( nBefore ) ); ::ZeroMemory( &nAfter, sizeof( nAfter ) ); QueryPerformanceFrequency( &nFreq ); QueryPerformanceCounter( &nBefore ); // 計測データを受信 // この関数は自作DLLからの呼び出しです。内部で DeviceIoControl 使用。他の複雑な処理はありません。 readData( 2048バイト受信 ); QueryPerformanceCounter( &nAfter ); DWORD dwTime = (DWORD)((nAfter.QuadPart - nBefore.QuadPart) * 1000 * 1000 / nFreq.QuadPart ); # 別スレッドでパフォーマンスカウンタを使用することが問題なのでしょうか?? 以上となります。 ご教授いただければ幸いです。
- DOS窓を閉じる×ボタンを押された際のハンドリング
DOS窓を閉じる右上の×ボタンを押された際のハンドリングを知りたいです。この×ボタンを押すとatexitで登録した関数やC++のデストラクタが呼ばれないのです。 どのように調べても情報が出てきません。 これはどのようにすれば良いか関数やキーワードだけでも良いので情報お願い致します。
- DOS窓を閉じる×ボタンを押された際のハンドリング
DOS窓を閉じる右上の×ボタンを押された際のハンドリングを知りたいです。この×ボタンを押すとatexitで登録した関数やC++のデストラクタが呼ばれないのです。 どのように調べても情報が出てきません。 これはどのようにすれば良いか関数やキーワードだけでも良いので情報お願い致します。
- USB の通信速度計測(パフォーマンスカウンタ使用)について
こんにちは。 Windows で USB の通信速度を計測する GUI アプリを作成しています。 質問ですが、計測するにあたって USBアナライザ(LE-620HS)の結果とアプリの結果が異なっており、その理由を教えていただきたいです。 環境は、ターゲットデバイス(SH7045、M66590FP、エンドポイントバッファ512Byte)、デバイスドライバ(KMDF)、PC(WinXP SP3、Pentium D 3.19GHz、メモリ3GB)、アプリ(VC9.0 MFC)となります。 また以下に示すコードはアプリのメインスレッドではなく、データ受信を行うための、別スレッドとなります。(受信スレッド) 2048Byte のデータを Bulk IN したとき USBアナライザでは「40us」、アプリでは「400us」と 約10倍程度、差があります。 アプリの計測コードはパフォーマンスカウンタを使用しています。 LARGE_INTEGER nFreq,nBefore,nAfter; ::ZeroMemory( &nFreq, sizeof( nFreq ) ); ::ZeroMemory( &nBefore, sizeof( nBefore ) ); ::ZeroMemory( &nAfter, sizeof( nAfter ) ); QueryPerformanceFrequency( &nFreq ); QueryPerformanceCounter( &nBefore ); // 計測データを受信 // この関数は自作DLLからの呼び出しです。内部で DeviceIoControl 使用。他の複雑な処理はありません。 readData( 2048バイト受信 ); QueryPerformanceCounter( &nAfter ); DWORD dwTime = (DWORD)((nAfter.QuadPart - nBefore.QuadPart) * 1000 * 1000 / nFreq.QuadPart ); # 別スレッドでパフォーマンスカウンタを使用することが問題なのでしょうか?? 以上となります。 ご教授いただければ幸いです。
- C++ 設定ファイル
VC++ではなく、ただのC++での質問です。 エラーメッセージやウインドウのサイズを外部ファイルに定義したいと思っています。 .NETではXMLファイルを使用していたのですが、C++では何を使うのが妥当でしょうか。 iniファイルというものもあるらしいのですが、 http://msdn.microsoft.com/ja-jp/library/cc429779.aspx にて、「この関数は、16 ビット Windows ベースのアプリケーションとの互換性を保つ目的でのみ提供されています。Win32 ベースのアプリケーションでは、初期化情報をレジストリに格納してください。」 といった内容が記述されており、iniファイルはあまり好ましくないようです。(この関数自体使えなくなる?)
- ベストアンサー
- C・C++・C#
- ShimantoGa
- 回答数5
- C++ 設定ファイル
VC++ではなく、ただのC++での質問です。 エラーメッセージやウインドウのサイズを外部ファイルに定義したいと思っています。 .NETではXMLファイルを使用していたのですが、C++では何を使うのが妥当でしょうか。 iniファイルというものもあるらしいのですが、 http://msdn.microsoft.com/ja-jp/library/cc429779.aspx にて、「この関数は、16 ビット Windows ベースのアプリケーションとの互換性を保つ目的でのみ提供されています。Win32 ベースのアプリケーションでは、初期化情報をレジストリに格納してください。」 といった内容が記述されており、iniファイルはあまり好ましくないようです。(この関数自体使えなくなる?)
- ベストアンサー
- C・C++・C#
- ShimantoGa
- 回答数5
- C++ シングルトン マルチスレッド
標準C++でシングルトンを実装したいのですが。 class Singleton{ public: static Singleton* getInstance(){ if (_instance == NULL){ //スレッドAがこの時点で、スレッドBがNULLチェックすると破綻する _instance = new Singleton(); } return _instance; } private: Singleton(); static Singleton* _instance; }; マルチスレッドになると上記のパターンで破綻するといわれどうしたものかと考えております。 static Singleton* _instance = new Singleton(); と出来れば解決なのですが 「static const int データメンバ以外をクラス内で初期化することはできません」 とのことでそれもできず。 どのようにすればよいでしょうか。
- ベストアンサー
- C・C++・C#
- ShimantoGa
- 回答数3
- C++ 設定ファイル
VC++ではなく、ただのC++での質問です。 エラーメッセージやウインドウのサイズを外部ファイルに定義したいと思っています。 .NETではXMLファイルを使用していたのですが、C++では何を使うのが妥当でしょうか。 iniファイルというものもあるらしいのですが、 http://msdn.microsoft.com/ja-jp/library/cc429779.aspx にて、「この関数は、16 ビット Windows ベースのアプリケーションとの互換性を保つ目的でのみ提供されています。Win32 ベースのアプリケーションでは、初期化情報をレジストリに格納してください。」 といった内容が記述されており、iniファイルはあまり好ましくないようです。(この関数自体使えなくなる?)
- ベストアンサー
- C・C++・C#
- ShimantoGa
- 回答数5
- Cygwinでg++がグローバル関数をはじいてしまう
現在Win XP上にGygwinを導入し C++の勉強をしています。 書籍を購入し、以下のプログラムを試したところ グローバル関数宣言をしているにもかかわらず main() とfunc1()中で変数”count”が undeclared (first use this function) として弾かれてしまいます。 どうしてなのでしょうか? よろしくお願いします。 //example global variavle. #include<iostream> using namespace std; void func1(); void func2(); static int count; //This is global variavle. int main() { int i; //This is local variavle. for(i=0; i<10 ; i++){ count = i * 2; func1(); //calling func1(). } return 0; } void func1() { cout << "count: " << count; //access global "count" cout << "\n"; func2(); //calling func2(). } void func2() { int count; //define local "count" for(count=0;count<3;count++) { cout << "."; } }
- Visual Studio2008でヘッダファイルが更新されない
C++で、単純な計算プログラムを作成しています。 main.cとinit.hの2つのファイルで構成しています。2つとも、プロジェクトの親フォルダに入っています。 ヘッダファイルを変更して、ソリューションのリビルドをしても、ヘッダファイルの変更が反映されません。 構造体をヘッダファイルに記載していて、メンバを追加してリビルド後も反映されません。#defineでヘッダに記載していた定数を変数に変更しようとして、define文を消してリビルドしても、その値がずっと定数のままになってしまいます。 init.hファイルのファイル名をinit2.hに変更して、includeファイルも#include "init2.h"に書き換えてビルドすると反映されます。非常に不思議です。どこかVisual Studioの設定のような気がするのですが、環境設定の方法がわからず困っております。 どなたかご教示・ヒント・キーワード等よろしくお願いします。
- C++ C# 語源
C++とC#(C++++)はかなり大雑把に言うとCの拡張版ですが、なぜ+が二個単位なのでしょうか。 C → C++ → C# C+とC+++は存在しないのでしょうか。 C → C+ → C++ → C+++ → C# もし存在しないのであれば、どのような理由でそうなったのでしょうか。
- ベストアンサー
- C・C++・C#
- ShimantoGa
- 回答数2
- C++BuilderとMATLABの連携
C++BuilderとMATLABというソフトウェアを連携させて、解析を行いたいと思っています。 調べた結果、MATLABエンジンを利用すればいいということが分かりました。 そこで、プログラムに以下の文を加えて実行したのですが、エラーが出てしまいました。 #include "engine.h" Engine *ep; ep=engOpen(NULL); エラー内容: 「外部シンボル '_engOpen'が未解決。」 どなたかわかる方、エラー対処のアドバイスをお願いします。
- 締切済み
- C・C++・C#
- smile_yuki
- 回答数3