//private void btncapture_Click(object sender, EventArgs e) //{ // try // { // if (_capture != null) // { // _capture.Dispose(); // Application.Idle -= new EventHandler(FrameGrabber); // btnstart.Enabled = true; // CaptureImgBox.Image = null; // } // } // catch (Exception ex) { } //} private void TampilkanPesan() { Titik titikKanan = new Titik(); DetekAtasBawah(rightSobelTreshold, titikKanan); Bitmap kananAtasBawah = CropAtasBawah(rightSobelTreshold, titikKanan); DetekKiriKanan(kananAtasBawah, titikKanan); Bitmap drawEyeKanan = DrawEye(kananAtasBawah, titikKanan); ptbHasilAkhirKanan.Image = drawEyeKanan; Titik titikKiri = new Titik(); DetekAtasBawah(leftSobelTreshold, titikKiri); Bitmap kiriAtasBawah = CropAtasBawah(leftSobelTreshold, titikKiri); DetekKiriKanan(kiriAtasBawah, titikKiri); Bitmap drawEyeKiri = DrawEye(kiriAtasBawah, titikKiri); ptbHasilAkhirKiri.Image = drawEyeKiri; //Hitung Total Energy var listEnergyKanan = HitungEnergy(drawEyeKanan); var listEnergyKiri = HitungEnergy(drawEyeKiri); double totalEnergyKanan = listEnergyKanan.Sum(a => a.Total); double totalEnergyKiri = listEnergyKiri.Sum(a => a.Total); //Pengecekan untuk mata setengah tertutup //if(totalEnergyKanan >= RangeEnergySetengahTertutup.start && totalEnergyKanan <= RangeEnergySetengahTertutup.end || totalEnergyKiri >= RangeEnergySetengahTertutup.start && totalEnergyKiri <= RangeEnergySetengahTertutup.end) //{ // System.Media.SoundPlayer player = new System.Media.SoundPlayer(@"EfekSuara.wav"); // player.Play(); // //Untuk Menampilkan pesan jika masuk dalam range // MessageBox.Show("Kiri: " + totalEnergyKiri.ToString("#,##0") + "\n" + "Kanan: " + totalEnergyKanan.ToString("#,##0"), "Mata Setengah Tertutup"); //} //Pengecekan untuk mata tertutup penuh if (totalEnergyKanan >= RangeEnergyTertutupPenuh.start && totalEnergyKanan <= RangeEnergyTertutupPenuh.end || totalEnergyKiri >= RangeEnergyTertutupPenuh.start && totalEnergyKiri <= RangeEnergyTertutupPenuh.end) { System.Media.SoundPlayer player = new System.Media.SoundPlayer(@"EfekSuara.wav"); player.Play(); //Untuk Menampilkan pesan jika masuk dalam range MessageBox.Show("Kiri: " + totalEnergyKiri.ToString("#,##0") + "\n" + "Kanan: " + totalEnergyKanan.ToString("#,##0"), "Anda Mengantuk"); } LblEnergyKanan.Text = "Energi Kiri: " + totalEnergyKanan.ToString("#,##0"); LblEnergyKiri.Text = "Energi Kanan: " + totalEnergyKiri.ToString("#,##0"); }
Bitmap CropAtasBawah(Bitmap bmp, Titik titik) { int newHeight = titik.Ybawah - titik.Yatas; Bitmap newBmp = new Bitmap(bmp.Width, newHeight); for (int i = 1; i < bmp.Width - 1; i++) { for (int j = 0; j < newHeight; j++) { newBmp.SetPixel(i, j, Color.White); int jT = j + titik.Yatas; Color clr = Color.FromArgb(bmp.GetPixel(i, jT).R, bmp.GetPixel(i, jT).G, bmp.GetPixel(i, jT).B); newBmp.SetPixel(i, j, clr); } } return(newBmp); }
// GET: Grid/Create public IActionResult AddOrEdit(int id, bool add = true) { bool isAjax = HttpContext.Request.Headers["X-Requested-With"] == "XMLHttpRequest"; if (!isAjax) { return(RedirectToAction(nameof(Index))); } if (id == 0) { return(NotFound()); //false; //RedirectToAction(nameof(Index)); } int sumbId = 0; int polaId = 0; var modelView = _context.TblTitik.Find(id); if (add) { //buat baru modelView = new Titik(); var tGrid = _context.TblTitik.Where(g => g.PolaId == id).ToList(); if (tGrid.Count > 0) { sumbId = tGrid.Where(g => g.Sumbu == ESumbu.X).Max(m => m.SumbuId) + 1; } polaId = id; } else { // edit yang sudah ada polaId = (int)modelView.PolaId; sumbId = modelView.SumbuId; } var pola = _context.TblPola.Find(polaId); ViewBag.PolaId = polaId; ViewBag.PolaNama = pola.Nama; ViewBag.SumbuId = sumbId == 0? 1 : sumbId; ViewBag.Satuan = pola.SatuanPenyusun; return(View(modelView)); }
public async Task <IActionResult> AddOrEdit(int id, [Bind("PolaId,TtkId,Sumbu,SumbuId,Nama,Jarak,PosAbs,PosReal")] Titik grid) { if (ModelState.IsValid) { if (id == 0) { _context.Add(grid); await _context.SaveChangesAsync(); } else if (id == grid.TtkId) { try { // datang dari Edit _context.Update(grid); await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!TitikExists(grid.TtkId)) { return(NotFound()); } else { throw; } } } // mendapatkan string view tanpa perlu ke methode yang bersangkutan var modalAjax = _context.TblTitik.Include(g => g.Pola) .Where(g => g.PolaId == grid.PolaId) .OrderBy(o => o.Sumbu).ThenBy(o => o.SumbuId) .ToList(); return(Json(new { isValid = true, html = Helper.RenderRazorViewToString(this, "RAB/_TblTitik", modalAjax) })); } // mendapatkan string view tanpa perlu ke methode yang bersangkutan //jika gagal return(Json(new { isValid = false, html = Helper.RenderRazorViewToString(this, "AddOrEdit", grid) })); }
//Deteksi Atas Bawah bool DetekAtasBawah(Bitmap bmp, Titik titik) { titik.AtasBawah = true; //Jika tepi mata terdeteksi dengan sempurna int height = bmp.Height; int width = bmp.Width; bool titikAtas = false; bool titikBawah = false; int i, j; for (i = width / 3; i < width / 1.5; i++) { for (j = 2; j < height; j++) { int pixelR = bmp.GetPixel(i, j).R; int pixelG = bmp.GetPixel(i, j).G; int pixelB = bmp.GetPixel(i, j).B; if (pixelR == 0 || pixelG == 0 || pixelB == 0) { titik.Xatas = i; titik.Yatas = j; titikAtas = true; break; } } if (titikAtas == true) { break; } } if (titikAtas == false) { titik.AtasBawah = false; return(titik.AtasBawah); } for (i = width / 3; i < width / 1.5; i++) { for (j = height - 1; j > 0; j--) { int pixelR = bmp.GetPixel(i, j).R; int pixelG = bmp.GetPixel(i, j).G; int pixelB = bmp.GetPixel(i, j).B; if (pixelR == 0 || pixelG == 0 || pixelB == 0) { titik.Xbawah = i; titik.Ybawah = j; titikBawah = true; break; } } if (titikBawah == true) { break; } } if (titik.Yatas > height / 2 || titik.Ybawah < height / 2) { titik.AtasBawah = false; } return(titik.AtasBawah); }
//Gambar mata Bitmap DrawEye(Bitmap bmp, Titik titik) { int newHeight = titik.Ybawah - titik.Yatas; int newWidth = titik.XKanan - titik.XKiri; Bitmap newBmp = new Bitmap(newWidth, newHeight); for (int x = 0; x < newBmp.Width; x++) { for (int y = 0; y < newBmp.Height; y++) { newBmp.SetPixel(x, y, Color.Black); } } //Left int j = titik.YKiri; int tengah = newWidth / 2; int mod = 1; int segment = (newHeight / j) * 2; int loop = 1; while (loop <= tengah || j > 0) { newBmp.SetPixel(loop, j, Color.White); if (loop >= tengah) { loop = tengah; j -= 1; } else if (loop % mod == 0) { j -= 1; } if (loop % segment == 0) { mod += 1; } if (j < 0) { j = 0; } loop += 1; } mod = 1; j = titik.YKiri; segment = (newHeight / j) * 2; loop = 1; while (loop < tengah || j < newHeight - titik.YKiri) { newBmp.SetPixel(loop, j, Color.White); if (loop % mod == 0) { j += 1; } if (loop % segment == 0) { mod += 1; } if (j >= newHeight - titik.YKiri) { j = newHeight - titik.YKiri; } if (loop >= tengah) { loop = tengah; j += 1; } else { loop += 1; } } //Right mod = 1; j = titik.YKanan; segment = (newHeight / j) * 2 == 0 ? 1 : (newHeight / j) * 2; tengah = newWidth / 2; loop = newWidth - 1; while (loop >= tengah || j > 0) { newBmp.SetPixel(loop, j, Color.White); if (loop <= tengah) { loop = tengah; j -= 1; } else if (loop % mod == 0) { j -= 1; } if (loop % segment == 0) { mod += 1; } if (j < 0) { j = 0; } loop -= 1; } mod = 1; j = titik.YKanan; segment = (newHeight / j) * 2 == 0 ? 1 : (newHeight / j) * 2; loop = newWidth - 1; while (loop > tengah || j < newHeight - titik.YKiri) { newBmp.SetPixel(loop, j, Color.White); if (loop % mod == 0) { j += 1; } if (loop % segment == 0) { mod += 1; } if (j >= newHeight - titik.YKiri) { j = newHeight - titik.YKiri; } if (loop <= tengah) { loop = tengah; j += 1; } else { loop -= 1; } } Bitmap resultBmp = new Bitmap(newWidth, newHeight - titik.YKiri); for (int x = 1; x < resultBmp.Width - 1; x++) { for (int y = 1; y < resultBmp.Height - 1; y++) { resultBmp.SetPixel(x, y, newBmp.GetPixel(x, y)); } } return(resultBmp); }
//Deteksi Titik Kiri dan Kanan Mata bool DetekKiriKanan(Bitmap bmp, Titik titik) { titik.KiriKanan = true; //Jika tepi mata terdeteksi dengan sempurna int height = bmp.Height; int width = bmp.Width; bool titikKiri = false; bool titikKanan = false; //titik kiri int i = 1; int j = 0; for (i = 1; i < width; i++) { for (j = height / 3; j < height / 1.5; j++) { int pixelR = bmp.GetPixel(i, j).R; int pixelG = bmp.GetPixel(i, j).G; int pixelB = bmp.GetPixel(i, j).B; if (pixelR == 0 || pixelG == 0 || pixelB == 0) { titik.XKiri = i; titik.YKiri = j; titikKiri = true; break; } } if (titikKiri == true) { break; } } if (titikKiri == false) { titik.KiriKanan = false; return(titik.KiriKanan); } //titik kanan for (i = width - 2; i > 1; i--) { for (j = height / 3; j < height / 1.5; j++) { int pixelR = bmp.GetPixel(i, j).R; int pixelG = bmp.GetPixel(i, j).G; int pixelB = bmp.GetPixel(i, j).B; if (pixelR == 0 || pixelG == 0 || pixelB == 0) { titik.XKanan = i; titik.YKanan = j; titikKanan = true; break; } } if (titikKanan == true) { break; } } if (titik.XKiri > width * 0.25 || titik.XKanan < width * 0.75) { titik.KiriKanan = false; } return(titik.KiriKanan); }