Предупреждающее сообщение "vshost.exe перестал работать"
У меня есть проблема с vshost.exe. В начале моего использования этого кода программа работает правильно, но после того, как я скопирую программу, теперь появляется такое предупреждение: vshost.exe перестал работать
Что заставляет это происходить? код выглядит следующим образом:
YIQprocess2 YIQ2 = new YIQprocess2(); YIQ2.Image = EditImage; YIQ2.YIQmethod2(); //this.Invalidate(); cetakgambar();
Это мой класс :
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Drawing; using System.Drawing.Imaging; namespace SkinCancerR01.BusinessRule { public class YIQprocess2 { public Bitmap Image { get; set; } public int seed, t, nilaikecil, nilaibesar, sementara; public void YIQmethod2() { Bitmap EditImage = this.Image; // GDI+ still lies to us - the return format is BGR, NOT RGB. BitmapData bmData = EditImage.LockBits(new Rectangle(0, 0, EditImage.Width, EditImage.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); int stride = bmData.Stride; System.IntPtr Scan0 = bmData.Scan0; unsafe { byte* p = (byte*)(void*)Scan0; int nOffset = stride - EditImage.Width * 3; byte red, green, blue, Yx, Ix, Qx; for (int y = 0; y < EditImage.Height; ++y) { for (int x = 0; x < EditImage.Width; ++x) { blue = p[x]; green = p[x + 1]; red = p[x + 2]; Yx = (byte)(.299 * red + .587 * green + .114 * blue); Ix = (byte)(.596 * red - .275 * green - .321 * blue); Qx = (byte)(.212 * red - .528 * green + .311 * blue); if ((y == 0) && (x == 0)) { nilaikecil = Yx; nilaibesar = Yx; } else { if (Yx < nilaikecil) { nilaikecil = Yx; } else if (Yx > nilaibesar) { nilaibesar = Yx; } } p += 3; } p += nOffset; } } t = (nilaibesar - nilaikecil) / 3; unsafe { byte* p = (byte*)(void*)Scan0; int nOffset = stride - EditImage.Width * 3; byte red, green, blue, Yx, Ix, Qx; for (int y = 0; y < EditImage.Height; ++y) { for (int x = 0; x < EditImage.Width; ++x) { blue = p[x]; green = p[x + 1]; red = p[x + 2]; Yx = (byte)(.299 * red + .587 * green + .114 * blue); Ix = (byte)(.596 * red - .275 * green - .321 * blue); Qx = (byte)(.212 * red - .528 * green + .311 * blue); //supaya setiap y baru seed juga baru if ((x == 0) || (seed == 0)) { //mengambil value seed seed = Yx; } else { sementara = Yx - seed; sementara = Math.Abs(sementara); if (sementara >= t) { for (int i = 0; i < 2; ++i) { p[x] = p[x + 1] = p[x + 2] = 255; ++x; } seed = 0; } } p += 3; } p += nOffset; } } EditImage.UnlockBits(bmData); } } }
Indivara
Незначительное редактирование-форматирование и заголовок
gunkrr
спасибо