public dynamicstestyesno( string test_propositions_filename, int image_width, int image_height) { this.image_width = image_width; this.image_height = image_height; test_image = new byte[image_width * image_height * 3]; for (int i = image_width * image_height * 3 - 1; i >= 0; i--) { test_image[i] = 255; } bmp = new Bitmap(image_width, image_height, System.Drawing.Imaging.PixelFormat.Format24bppRgb); mouse_position = new List <double>(); mouse_time = new List <DateTime>(); propositions = new List <string> [10]; rnd = new Random(); for (int i = 0; i < 10; i++) { propositions[i] = new List <string>(); } BitmapArrayConversions.updatebitmap_unsafe(test_image, bmp); bmp.Save("test.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); if (File.Exists(test_propositions_filename)) { LoadPropositions(test_propositions_filename, "Mind Hack", propositions); } }
private void CreateTestImage() { for (int i = image_width * image_height * 3 - 1; i >= 0; i--) { test_image[i] = 255; } BitmapArrayConversions.updatebitmap_unsafe(test_image, bmp); bmp.Save("blank.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); int font_size = 20; yesno_y = image_height * 1 / 10; radius = image_height / 12; int left_x = image_width / 10; int right_x = image_width - 1 - left_x; yes_left = true; if (rnd.NextDouble() > 0.5) { yes_left = false; } drawing.drawSpot(test_image, image_width, image_height, left_x, yesno_y, radius, 200, 255, 200); drawing.drawSpot(test_image, image_width, image_height, right_x, yesno_y, radius, 200, 255, 200); if (yes_left) { yes_x = left_x; no_x = right_x; } else { yes_x = right_x; no_x = left_x; } drawing.AddText(test_image, image_width, image_height, "Yes", "Courier", font_size, 0, 0, 0, yes_x - font_size, yesno_y - font_size); drawing.AddText(test_image, image_width, image_height, "No", "Courier", font_size, 0, 0, 0, no_x - font_size, yesno_y - font_size); BitmapArrayConversions.updatebitmap_unsafe(test_image, bmp); bmp.Save("test.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); }
/// <summary> /// add some text to the given image /// </summary> /// <param name="img">colour image into which to insert th text</param> /// <param name="img_width">width of the image</param> /// <param name="img_height">height of the image</param> /// <param name="text">text to be added</param> /// <param name="font">font style</param> /// <param name="font_size">font size</param> /// <param name="r">red</param> /// <param name="g">green</param> /// <param name="b">blue</param> /// <param name="position_x">x coordinate at which to insert the text</param> /// <param name="position_y">y coordinate at which to insert the text</param> public static void AddText(byte[] img, int img_width, int img_height, String text, String font, int font_size, int r, int g, int b, float position_x, float position_y) { Bitmap screen_bmp = new Bitmap(img_width, img_height, System.Drawing.Imaging.PixelFormat.Format24bppRgb); // insert the existing image into the bitmap BitmapArrayConversions.updatebitmap_unsafe(img, screen_bmp); Font drawFont = new Font(font, font_size); SolidBrush drawBrush = new SolidBrush(Color.FromArgb(r, g, b)); Graphics grph = Graphics.FromImage(screen_bmp); grph.DrawString(text, drawFont, drawBrush, position_x, position_y); grph.Dispose(); // extract the bitmap data BitmapArrayConversions.updatebitmap(screen_bmp, img); }
public void ShowAllResults() { StreamReader oRead = null; bool filefound = true; int bucket_pixels = 5; int group_ms = 60; int font_size = 20; yesno_y = image_height * 1 / 10; radius = image_height / 12; int left_x = image_width / 10; int right_x = image_width - 1 - left_x; for (int i = image_width * image_height * 3 - 1; i >= 0; i--) { test_image[i] = 255; } drawing.drawSpot(test_image, image_width, image_height, left_x, yesno_y, radius, 200, 255, 200); drawing.drawSpot(test_image, image_width, image_height, right_x, yesno_y, radius, 200, 255, 200); drawing.AddText(test_image, image_width, image_height, "Yes", "Courier", font_size, 0, 0, 0, right_x - font_size, yesno_y - font_size); drawing.AddText(test_image, image_width, image_height, "No", "Courier", font_size, 0, 0, 0, left_x - font_size, yesno_y - font_size); int[,,] average = new int[image_height, 10, 2]; int histogram_max = 1; int[] histogram_no = new int[image_width]; int[] histogram_yes = new int[image_width]; int[,] histogram_decision_time = new int[5, 1000]; int max_decision_time_mS = 100; int decision_time_hist_max = 1; float average_decision_time = 0; int average_decision_time_hits = 0; DateTime prev_timestamp = new DateTime(1900, 1, 1); byte[] test_image2 = new byte[test_image.Length]; for (int i = image_width * image_height * 3 - 1; i >= 0; i--) { test_image2[i] = 255; } try { oRead = File.OpenText(results_filename); } catch { filefound = false; } if (filefound) { while (!oRead.EndOfStream) { int steps = Convert.ToInt32(oRead.ReadLine()); bool yes = Convert.ToBoolean(oRead.ReadLine()); bool yes_left = Convert.ToBoolean(oRead.ReadLine()); coherence_index = Convert.ToInt32(oRead.ReadLine()); int prev_x = 0; int prev_y = 0; DateTime start_time = DateTime.Now; int decision_time_mS = 0; float speed_pixels_per_sec = 0; int prev_x2 = 9999; int prev_y2 = 0; for (int t = 0; t < steps; t++) { string s = oRead.ReadLine(); string[] s2 = s.Split(' '); DateTime timestamp = DateTime.FromBinary(Convert.ToInt64(s2[0])); if (t == 0) { start_time = timestamp; } if (t == steps - 1) { TimeSpan diff = timestamp.Subtract(start_time); int time_mS = (int)diff.TotalMilliseconds; if (time_mS / 4 < 1000 / 4) { if (time_mS > max_decision_time_mS) { max_decision_time_mS = time_mS; } histogram_decision_time[coherence_index / 2, time_mS / 250]++; if (histogram_decision_time[coherence_index / 2, time_mS / 250] > decision_time_hist_max) { decision_time_hist_max = histogram_decision_time[coherence_index / 2, time_mS / 250]; } average_decision_time += (float)time_mS; average_decision_time_hits++; } } int x = Convert.ToInt32(Convert.ToSingle(s2[1])); if (yes_left) { x = image_width - 1 - x; } int y = Convert.ToInt32(Convert.ToSingle(s2[2])); if (t > 0) { int entropy = (5 - Math.Abs(coherence_index - 5)) * 255 / 5; //Console.WriteLine("entropy = " + entropy.ToString()); if (coherence_index == 9) { drawing.drawLine(test_image, image_width, image_height, prev_x, prev_y, x, y, entropy, 0, 255 - entropy, 0, false); } if (coherence_index == 5) { drawing.drawLine(test_image2, image_width, image_height, prev_x, prev_y, x, y, entropy, 0, 255 - entropy, 0, false); } int step = 1; if (y < prev_y) { step = -1; } int n = 0; if (y - prev_y != 0) { int yy = prev_y; while (yy != y) { int xx = prev_x + ((x - prev_x) * n / (Math.Abs(y - prev_y))); if ((xx > -1) && (xx < image_width) && (yy > -1) && (yy < image_height)) { average[yy, coherence_index, 0] += xx; average[yy, coherence_index, 1]++; if (yes) { int xx2 = xx / bucket_pixels; histogram_yes[xx2]++; if (histogram_yes[xx2] > histogram_max) { histogram_max = histogram_yes[xx2]; } } else { int xx2 = xx / bucket_pixels; histogram_no[xx2]++; if (histogram_no[xx2] > histogram_max) { histogram_max = histogram_no[xx2]; } } } yy += step; n++; } } } prev_x = x; prev_y = y; } } oRead.Close(); } BitmapArrayConversions.updatebitmap_unsafe(test_image, bmp); bmp.Save("test_results_low_entropy.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); BitmapArrayConversions.updatebitmap_unsafe(test_image2, bmp); bmp.Save("test_results_high_entropy.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); for (int i = image_width * image_height * 3 - 1; i >= 0; i--) { test_image[i] = 255; } drawing.drawSpot(test_image, image_width, image_height, left_x, yesno_y, radius, 200, 255, 200); drawing.drawSpot(test_image, image_width, image_height, right_x, yesno_y, radius, 200, 255, 200); drawing.AddText(test_image, image_width, image_height, "Yes", "Courier", font_size, 0, 0, 0, right_x - font_size, yesno_y - font_size); drawing.AddText(test_image, image_width, image_height, "No", "Courier", font_size, 0, 0, 0, left_x - font_size, yesno_y - font_size); drawing.drawLine(test_image, image_width, image_height, image_width / 2, 0, image_width / 2, image_height - 1, 220, 220, 220, 1, false); for (int coherence_index = 0; coherence_index < 10; coherence_index++) { bool labeled = false; int r = 255 - (255 * coherence_index / 10); int g = 255 * coherence_index / 10; for (int y = 0; y < image_height; y++) { if (average[y, coherence_index, 1] > 0) { int x = average[y, coherence_index, 0] / average[y, coherence_index, 1]; drawing.drawSpot(test_image, image_width, image_height, x, y, 1, r, g, 0); if ((!labeled) && (y > image_height * 15 / 100)) { drawing.AddText(test_image, image_width, image_height, "0." + coherence_index.ToString(), "Courier", 10, 0, 0, 0, x, y + rnd.Next(40) - 20); labeled = true; } } } } BitmapArrayConversions.updatebitmap_unsafe(test_image, bmp); bmp.Save("test_results_average.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); /* * for (int i = image_width*image_height*3-1; i >= 0; i--) * test_image[i]=255; * drawing.drawLine(test_image, image_width, image_height, image_width/2, 0, image_width/2, image_height-1, 220,220,220,1,false); * for (int x = 1; x < image_width/bucket_pixels; x++) * { * int prev_y_yes = image_height - 1 - (histogram_yes[x-1]*(image_height*110/100)/histogram_max); * int prev_y_no = image_height - 1 - (histogram_no[x-1]*(image_height*110/100)/histogram_max); * int y_yes = image_height - 1 - (histogram_yes[x]*(image_height*110/100)/histogram_max); * int y_no = image_height - 1 - (histogram_no[x]*(image_height*110/100)/histogram_max); * drawing.drawLine(test_image, image_width, image_height, (x-1)*bucket_pixels, prev_y_yes, x*bucket_pixels, y_yes, 0,255,0,0,false); * drawing.drawLine(test_image, image_width, image_height, (x-1)*bucket_pixels, prev_y_no, x*bucket_pixels, y_no, 255,0,0,0,false); * } * BitmapArrayConversions.updatebitmap_unsafe(test_image, bmp); * bmp.Save("test_results_horizontal.jpg",System.Drawing.Imaging.ImageFormat.Jpeg); */ /* * for (int i = image_width*image_height*3-1; i >= 0; i--) test_image[i]=255; * for (int coherence_index=0; coherence_index<5;coherence_index++) * { * int r = 255-(coherence_index*255/5); * int g = coherence_index*255/5; * for (int t = 1; t < max_decision_time_mS/250; t++) * { * int prev_x = (t-1) * image_width / (max_decision_time_mS/250); * int x = t * image_width / (max_decision_time_mS/250); * * int prev_y = image_height - 1 - ((histogram_decision_time[coherence_index,t-1]) * image_height / decision_time_hist_max); * int y = image_height - 1 - ((histogram_decision_time[coherence_index,t]) * image_height / decision_time_hist_max); * drawing.drawLine(test_image, image_width, image_height, prev_x, prev_y, x, y, r,g,0,1,false); * } * } * BitmapArrayConversions.updatebitmap_unsafe(test_image, bmp); * bmp.Save("test_results_decision_times.jpg",System.Drawing.Imaging.ImageFormat.Jpeg); */ }