カメラに入る最大強度を示すゲージを作成しました。ゲージを作成するために、最初にパネルの背景にダイヤラーを配置し、次にそのパネルにあるpictureBoxと透明な背景を持つpictureBoxに針を描きました。
私のコードは次のとおりです...
private: System::Void FocusExposure_Load(System::Object^ sender, System::EventArgs^ e) {
th = gcnew Thread(gcnew ThreadStart(this,&FocusExposure::UpdateIntensity));
th->Start();
}
void UpdateIntensity()
{
int intensity=0;
Intensity_Values data;
while(1)
{
data = ReadImage(cameraBuffer);
if(count == 1)
{
count++;
label14->Text = Convert::ToString(data.Max);
}
label7->Text = Convert::ToString(data.Max);
label8->Text = Convert::ToString(data.Min);
label9->Text = Convert::ToString(data.Avg);
label10->Text = Convert::ToString(data.Max_Min);
draw_Intens( data.Max);
}
}
private: void draw_Intens(int intensity)
{
this->pictureBox1->Refresh();
double const PI = 3.14159265358979323;
float degree=angle_array[intensity]*PI/180;
circumPoint xy= cordinate_point(degree);
Graphics ^ graphics = pictureBox1->CreateGraphics();
SolidBrush^ shadowBrush = gcnew SolidBrush( Color::Blue );
Pen^ penCurrent = gcnew Pen(Color::Blue,3);
graphics->FillEllipse(shadowBrush, 93, 93,14, 14);
graphics->DrawLine(penCurrent, Point(100, 100), Point(xy.x, xy.y));
delete penCurrent;
delete shadowBrush;
delete graphics;
}
circumPoint cordinate_point(float degree)
{
circumPoint pointxy;
pointxy.x = 100+redius * cos(degree);
pointxy.y = 100+redius * sin(degree);
return pointxy;
}
angle_arraydouble angle_array[]={126.000000,126.070313,126.140625,...,414.000000}
は、これらの値を使用して針が回転する 4097 の角度値を持つ配列です。
ReadImage(cameraBuffer)は、Max、Min、Avg、Max_Min 強度値を返す関数です。
Intensity_Valuesは、Max Min Avg Max_Min 値の構造体です。
typedef struct {
int Max;
int Min;
int Avg;
int Max_Min;
} Intensity_Values;
私のゲージはこんな感じです...
左側は最小強度 0 で、右側は最大強度値 4096 です。
今私の問題は、アプリケーションを実行しているときにアプリケーションが起動し、2 3 秒後にハングするか、動作が停止することです。問題はメモリリークかもしれないと思いますが、どこに問題があるのかわかりません。
この問題を解決するのを手伝ってください。
どんな助けでも大歓迎です。
ありがとう。