コード例 #1
0
        private RGB_Double Update_HBM_Normal_Gamma_Voltage(OC_Mode mode, int band, int gray, RGB New_Gamma)
        {
            RGB_Double[,] OCMode_RGB_Voltage = Get_OC_Mode_RGB_Voltage(mode);

            if (gray == 0)
            {
                OCMode_RGB_Voltage[band, gray].double_R = Imported_my_cpp_dll.DP213_Get_AM2_Gamma_Voltage(ref0ref4095.Get_Normal_REF4095_Voltage(), vreg1.Get_OC_Mode_Vreg1_Voltage(mode, band), New_Gamma.int_R);
                OCMode_RGB_Voltage[band, gray].double_G = Imported_my_cpp_dll.DP213_Get_AM2_Gamma_Voltage(ref0ref4095.Get_Normal_REF4095_Voltage(), vreg1.Get_OC_Mode_Vreg1_Voltage(mode, band), New_Gamma.int_G);
                OCMode_RGB_Voltage[band, gray].double_B = Imported_my_cpp_dll.DP213_Get_AM2_Gamma_Voltage(ref0ref4095.Get_Normal_REF4095_Voltage(), vreg1.Get_OC_Mode_Vreg1_Voltage(mode, band), New_Gamma.int_B);
            }
            else
            {
                RGB_Double Prev_GR_Gamma_Voltage = Get_Prev_GR_Gamma_Voltage(OCMode_RGB_Voltage, band, gray);
                OCMode_RGB_Voltage[band, gray].double_R = Imported_my_cpp_dll.DP213_Get_GR_Gamma_Voltage(am1am0.Get_OC_Mode_AM1_Voltage(mode, band).double_R, Prev_GR_Gamma_Voltage.double_R, New_Gamma.int_R, gray);
                OCMode_RGB_Voltage[band, gray].double_G = Imported_my_cpp_dll.DP213_Get_GR_Gamma_Voltage(am1am0.Get_OC_Mode_AM1_Voltage(mode, band).double_G, Prev_GR_Gamma_Voltage.double_G, New_Gamma.int_G, gray);
                OCMode_RGB_Voltage[band, gray].double_B = Imported_my_cpp_dll.DP213_Get_GR_Gamma_Voltage(am1am0.Get_OC_Mode_AM1_Voltage(mode, band).double_B, Prev_GR_Gamma_Voltage.double_B, New_Gamma.int_B, gray);
            }
            return(OCMode_RGB_Voltage[band, gray]);
        }
コード例 #2
0
        private double Get_HBM_RGB_Min_AM2_Voltage()
        {
            RGB AM2     = ocparam.Get_OC_Mode_RGB(DP213OCSet.Get_WhiteCompensation_OCMode(), band: 0, gray: 0);
            int Vreg1   = ocparam.Get_OC_Mode_Vreg1(DP213OCSet.Get_WhiteCompensation_OCMode(), band: 0);
            int REF0    = ocparam.Get_Normal_REF0();
            int REF4095 = ocparam.Get_Normal_REF4095();

            double REF0_Voltage    = Imported_my_cpp_dll.DP213_VREF0_Dec_to_Voltage(REF0);
            double REF4095_Voltage = Imported_my_cpp_dll.DP213_VREF4095_Dec_to_Voltage(REF4095);
            double Vreg1_Voltage   = Imported_my_cpp_dll.DP213_Get_Vreg1_Voltage(REF4095_Voltage, REF0_Voltage, Vreg1);

            RGB_Double AM2_Voltage = new RGB_Double();

            AM2_Voltage.double_R = Imported_my_cpp_dll.DP213_Get_AM2_Gamma_Voltage(REF4095_Voltage, Vreg1_Voltage, AM2.int_R);
            AM2_Voltage.double_G = Imported_my_cpp_dll.DP213_Get_AM2_Gamma_Voltage(REF4095_Voltage, Vreg1_Voltage, AM2.int_G);
            AM2_Voltage.double_B = Imported_my_cpp_dll.DP213_Get_AM2_Gamma_Voltage(REF4095_Voltage, Vreg1_Voltage, AM2.int_B);
            api.WriteLine("AM2_Voltage R/G/B : " + AM2_Voltage.double_R + "/" + AM2_Voltage.double_G + "/" + AM2_Voltage.double_B);
            api.WriteLine("Old VREF0 Voltage : " + REF0_Voltage);

            return(Get_Min_RGB_Voltage(AM2_Voltage));
        }
コード例 #3
0
        private static double[] Get_Previous_Band_Gamma_Voltage(double Prev_Band_AM1_Voltage, int Previous_Band_Vreg1_Dec, int[] Previous_Band_Gamma, double Voltage_VREF4095, double Voltage_VREF0)
        {
            double[] Previous_Band_Gamma_Voltage = new double[DP213_Static.Max_Gray_Amount];
            double   Previous_Band_Vreg1_Voltage = Imported_my_cpp_dll.DP213_Get_Vreg1_Voltage(Voltage_VREF4095, Voltage_VREF0, Previous_Band_Vreg1_Dec);

            for (int gray = 0; gray < DP213_Static.Max_Gray_Amount; gray++)
            {
                if (gray == 0)
                {
                    Previous_Band_Gamma_Voltage[gray] = Imported_my_cpp_dll.DP213_Get_AM2_Gamma_Voltage(Voltage_VREF4095, Previous_Band_Vreg1_Voltage, Previous_Band_Gamma[gray]);
                }

                else if (gray == 1 || gray == 2 || gray == 3 || gray == 5 || gray == 7 || gray == 9 || gray == 10)
                {
                    Previous_Band_Gamma_Voltage[gray] = Imported_my_cpp_dll.DP213_Get_GR_Gamma_Voltage(Prev_Band_AM1_Voltage, Previous_Band_Gamma_Voltage[gray - 1], Previous_Band_Gamma[gray], gray);
                }

                else if (gray == 4 || gray == 6 || gray == 8)
                {
                    Previous_Band_Gamma_Voltage[gray] = Imported_my_cpp_dll.DP213_Get_GR_Gamma_Voltage(Prev_Band_AM1_Voltage, Previous_Band_Gamma_Voltage[gray - 2], Previous_Band_Gamma[gray], gray);
                }
            }
            return(Previous_Band_Gamma_Voltage);
        }
コード例 #4
0
        private void Update_HBM_Normal_Gamma_Voltage(Gamma_Set Set, int band, int gray, RGB New_Gamma)
        {
            if (gray == 0)
            {
                Voltage_All_band_gray_Gamma[Convert.ToInt16(Set), band, gray].double_R = Imported_my_cpp_dll.DP213_Get_AM2_Gamma_Voltage(Get_Voltage_VREF4095(), Get_Normal_Voltage_Vreg1(Set, band), New_Gamma.int_R);
                Voltage_All_band_gray_Gamma[Convert.ToInt16(Set), band, gray].double_G = Imported_my_cpp_dll.DP213_Get_AM2_Gamma_Voltage(Get_Voltage_VREF4095(), Get_Normal_Voltage_Vreg1(Set, band), New_Gamma.int_G);
                Voltage_All_band_gray_Gamma[Convert.ToInt16(Set), band, gray].double_B = Imported_my_cpp_dll.DP213_Get_AM2_Gamma_Voltage(Get_Voltage_VREF4095(), Get_Normal_Voltage_Vreg1(Set, band), New_Gamma.int_B);
            }
            else
            {
                RGB_Double Prev_GR_Gamma_Voltage = new RGB_Double();
                if (gray == 1 || gray == 2 || gray == 3 || gray == 5 || gray == 7 || gray == 9 || gray == 10)
                {
                    Prev_GR_Gamma_Voltage.double_R = Voltage_All_band_gray_Gamma[Convert.ToInt16(Set), band, (gray - 1)].double_R;
                    Prev_GR_Gamma_Voltage.double_G = Voltage_All_band_gray_Gamma[Convert.ToInt16(Set), band, (gray - 1)].double_G;
                    Prev_GR_Gamma_Voltage.double_B = Voltage_All_band_gray_Gamma[Convert.ToInt16(Set), band, (gray - 1)].double_B;
                }

                else if (gray == 4 || gray == 6 || gray == 8)
                {
                    Prev_GR_Gamma_Voltage.double_R = Voltage_All_band_gray_Gamma[Convert.ToInt16(Set), band, (gray - 2)].double_R;
                    Prev_GR_Gamma_Voltage.double_G = Voltage_All_band_gray_Gamma[Convert.ToInt16(Set), band, (gray - 2)].double_G;
                    Prev_GR_Gamma_Voltage.double_B = Voltage_All_band_gray_Gamma[Convert.ToInt16(Set), band, (gray - 2)].double_B;
                }
                Voltage_All_band_gray_Gamma[Convert.ToInt16(Set), band, gray].double_R = Imported_my_cpp_dll.DP213_Get_GR_Gamma_Voltage(Get_Band_Set_Voltage_AM1(Set, band).double_R, Prev_GR_Gamma_Voltage.double_R, New_Gamma.int_R, gray);
                Voltage_All_band_gray_Gamma[Convert.ToInt16(Set), band, gray].double_G = Imported_my_cpp_dll.DP213_Get_GR_Gamma_Voltage(Get_Band_Set_Voltage_AM1(Set, band).double_G, Prev_GR_Gamma_Voltage.double_G, New_Gamma.int_G, gray);
                Voltage_All_band_gray_Gamma[Convert.ToInt16(Set), band, gray].double_B = Imported_my_cpp_dll.DP213_Get_GR_Gamma_Voltage(Get_Band_Set_Voltage_AM1(Set, band).double_B, Prev_GR_Gamma_Voltage.double_B, New_Gamma.int_B, gray);
            }
        }
コード例 #5
0
        public static void C_Sharp_DP213_Gray255_Get_Intial_R_Vreg1_B_Using_Previous_Band_Method(double Prev_Band_Voltage_AM1_R, double Prev_Band_Voltage_AM1_G, double Prev_Band_Voltage_AM1_B, ref int Vreg1_Dec_Init, ref int Gamma_R, ref int Gamma_B,
                                                                                                 bool[] Selected_Band, int[] Previous_Band_Gamma_Red, int[] Previous_Band_Gamma_Green, int[] Previous_Band_Gamma_Blue, int band, double band_Target_Lv, int Previous_Band_Vreg1_Dec
                                                                                                 , double[] Previous_Band_Finally_Measured_Lv, double Voltage_VREF4095, double Voltage_VREF0)
        {
            Form1 f1 = (Form1)Application.OpenForms["Form1"];

            if (band >= 1 && Selected_Band[band] == true)
            {
                SJH_Matrix M = new SJH_Matrix();
                double[]   Previous_Band_Gamma_Red_Voltage   = Get_Previous_Band_Gamma_Voltage(Prev_Band_Voltage_AM1_R, Previous_Band_Vreg1_Dec, Previous_Band_Gamma_Red, Voltage_VREF4095, Voltage_VREF0);
                double[]   Previous_Band_Gamma_Green_Voltage = Get_Previous_Band_Gamma_Voltage(Prev_Band_Voltage_AM1_G, Previous_Band_Vreg1_Dec, Previous_Band_Gamma_Green, Voltage_VREF4095, Voltage_VREF0);
                double[]   Previous_Band_Gamma_Blue_Voltage  = Get_Previous_Band_Gamma_Voltage(Prev_Band_Voltage_AM1_B, Previous_Band_Vreg1_Dec, Previous_Band_Gamma_Blue, Voltage_VREF4095, Voltage_VREF0);

                double[][] A_R = M.MatrixCreate(DP213_Static.Max_Gray_Amount, DP213_Static.Max_Gray_Amount);
                double[][] A_G = M.MatrixCreate(DP213_Static.Max_Gray_Amount, DP213_Static.Max_Gray_Amount);
                double[][] A_B = M.MatrixCreate(DP213_Static.Max_Gray_Amount, DP213_Static.Max_Gray_Amount);

                //Get A[i][count] = Previous_Band_Gamma_Green_Voltage[i]^j
                int count = 0;
                for (int i = 0; i <= (DP213_Static.Max_Gray_Amount - 1); i++)
                {
                    count = 0;
                    for (int j = (DP213_Static.Max_Gray_Amount - 1); j >= 0; j--)
                    {
                        A_R[i][count] = Math.Pow(Previous_Band_Gamma_Red_Voltage[i], j);
                        A_G[i][count] = Math.Pow(Previous_Band_Gamma_Green_Voltage[i], j);
                        A_B[i][count] = Math.Pow(Previous_Band_Gamma_Blue_Voltage[i], j);
                        count++;
                    }
                }

                //Get C[DP213_Static.Max_Gray_Amount] = inv(A)[DP213_Static.Max_Gray_Amount,DP213_Static.Max_Gray_Amount] * Previous_Band_Target_Lv[DP213_Static.Max_Gray_Amount]
                double[][] Inv_A_R = M.MatrixCreate(DP213_Static.Max_Gray_Amount, DP213_Static.Max_Gray_Amount);
                double[][] Inv_A_G = M.MatrixCreate(DP213_Static.Max_Gray_Amount, DP213_Static.Max_Gray_Amount);
                double[][] Inv_A_B = M.MatrixCreate(DP213_Static.Max_Gray_Amount, DP213_Static.Max_Gray_Amount);
                double[]   C_R     = new double[DP213_Static.Max_Gray_Amount];
                double[]   C_G     = new double[DP213_Static.Max_Gray_Amount];
                double[]   C_B     = new double[DP213_Static.Max_Gray_Amount];
                Inv_A_R = M.MatrixInverse(A_R);
                Inv_A_G = M.MatrixInverse(A_G);
                Inv_A_B = M.MatrixInverse(A_B);
                C_R     = M.Matrix_Multiply(Inv_A_R, Previous_Band_Finally_Measured_Lv);
                C_G     = M.Matrix_Multiply(Inv_A_G, Previous_Band_Finally_Measured_Lv);
                C_B     = M.Matrix_Multiply(Inv_A_B, Previous_Band_Finally_Measured_Lv);

                //Show "C10*(Vdata^10) + C9*(Vdata^9) + C8*(Vdata^8) + C7*(Vdata^7) + C6*(Vdata^6) + .... + C1*Vdata + C0 = Lv"
                double Target_Lv              = band_Target_Lv;
                double Calculated_Vdata_Red   = 0;
                double Calculated_Vdata_Green = 0;
                double Calculated_Vdata_Blue  = 0;
                double Calculated_Target_Lv   = 0;
                int    iteration;

                //Get Vreg1 From Gamma_Green (Or the "Actual_Previous_Vdata_Green" can directly get from the datagridview_voltage_table
                //Didn't get data directly from the datagridview_voltage_table, because it's gonna be easier to code in cpp dll
                double Previous_Band_Vreg1_Voltage = Imported_my_cpp_dll.DP213_Get_Vreg1_Voltage(Voltage_VREF4095, Voltage_VREF0, Previous_Band_Vreg1_Dec);
                double Actual_Previous_Vdata_Red   = Imported_my_cpp_dll.DP213_Get_AM2_Gamma_Voltage(Voltage_VREF4095, Previous_Band_Vreg1_Voltage, Previous_Band_Gamma_Red[0]);
                double Actual_Previous_Vdata_Green = Imported_my_cpp_dll.DP213_Get_AM2_Gamma_Voltage(Voltage_VREF4095, Previous_Band_Vreg1_Voltage, Previous_Band_Gamma_Green[0]);
                double Actual_Previous_Vdata_Blue  = Imported_my_cpp_dll.DP213_Get_AM2_Gamma_Voltage(Voltage_VREF4095, Previous_Band_Vreg1_Voltage, Previous_Band_Gamma_Blue[0]);

                //Red
                for (double Vdata = Actual_Previous_Vdata_Red; Vdata <= Voltage_VREF4095; Vdata += 0.001)
                {
                    Calculated_Target_Lv = 0;
                    iteration            = 0;
                    for (int j = (DP213_Static.Max_Gray_Amount - 1); j >= 0; j--)
                    {
                        Calculated_Target_Lv += (Math.Pow(Vdata, j) * C_R[iteration++]);
                    }
                    if ((Calculated_Target_Lv < Target_Lv) && Calculated_Vdata_Red == 0)
                    {
                        Calculated_Vdata_Red = Vdata;
                        break;
                    }
                }

                //Green
                for (double Vdata = Actual_Previous_Vdata_Green; Vdata <= Voltage_VREF4095; Vdata += 0.001)
                {
                    Calculated_Target_Lv = 0;
                    iteration            = 0;
                    for (int j = (DP213_Static.Max_Gray_Amount - 1); j >= 0; j--)
                    {
                        Calculated_Target_Lv += (Math.Pow(Vdata, j) * C_G[iteration++]);
                    }

                    if ((Calculated_Target_Lv < Target_Lv) && Calculated_Vdata_Green == 0)
                    {
                        Calculated_Vdata_Green = Vdata;
                        break;
                    }
                }

                //Blue
                for (double Vdata = Actual_Previous_Vdata_Blue; Vdata <= Voltage_VREF4095; Vdata += 0.001)
                {
                    Calculated_Target_Lv = 0;
                    iteration            = 0;
                    for (int j = (DP213_Static.Max_Gray_Amount - 1); j >= 0; j--)
                    {
                        Calculated_Target_Lv += (Math.Pow(Vdata, j) * C_B[iteration++]);
                    }
                    if ((Calculated_Target_Lv < Target_Lv) && Calculated_Vdata_Blue == 0)
                    {
                        Calculated_Vdata_Blue = Vdata;
                        break;
                    }
                }

                f1.GB_Status_AppendText_Nextline("RBVreg1 Algorithm)Calculated_Vdata_Red/Calculated_Vdata_Green/Calculated_Vdata_Blue : "
                                                 + Calculated_Vdata_Red.ToString() + "/" + Calculated_Vdata_Green.ToString() + "/" + Calculated_Vdata_Blue.ToString(), Color.Blue);

                double Calculated_Vreg1_voltage = Voltage_VREF4095 + ((Calculated_Vdata_Green - Voltage_VREF4095) * (900.0 / (Previous_Band_Gamma_Green[0] + 389.0))); //just use HBM_Gamma[0], because other normal band copy G255 R/G/B From HBM
                Vreg1_Dec_Init = Imported_my_cpp_dll.DP213_Get_Vreg1_Dec(Voltage_VREF4095, Voltage_VREF0, Calculated_Vreg1_voltage);

                f1.GB_Status_AppendText_Nextline("RBVreg1 Algorithm)Calculated_Vreg1_voltage : " + Calculated_Vreg1_voltage.ToString(), Color.Blue);

                //Got the Vreg1
                //Need to get Gamma_R/B
                Gamma_R = Imported_my_cpp_dll.DP213_Get_AM2_Gamma_Dec(Voltage_VREF4095, Calculated_Vreg1_voltage, Calculated_Vdata_Red);
                Gamma_B = Imported_my_cpp_dll.DP213_Get_AM2_Gamma_Dec(Voltage_VREF4095, Calculated_Vreg1_voltage, Calculated_Vdata_Blue);

                DP213_If_One_Of_RGB_Near_Register_Min_Max_Set_Gamma_As_Prev_Band_Gamma(ref Gamma_R, ref Previous_Band_Gamma_Blue[0], ref Gamma_B, Previous_Band_Gamma_Red[0], Previous_Band_Gamma_Green[0], Previous_Band_Gamma_Blue[0]);
            }
            else //Band0 + Other not selected Bands's
            {
                //Do nothing
            }
        }