Thread: Graphics in C#

  1. #1
    Registered User
    Join Date
    May 2009

    Graphics in C#


    Is it possible to make a program which will recognize colors in a picture (.jpg, .gif or any other type). Eg if I click on a certain part of a picture, I want the to see the message telling me which color I'v clicked on and to store that info in a string for further use.


  2. #2
    Kernel hacker
    Join Date
    Jul 2007
    Farncombe, Surrey, England
    I have no knowledge of the API's in C#, but this is what you need:
    1. Load and draw image on screen.
    2. A way to identify the location clicked.
    3. Use something like "GetPixel" for the location.
    4. Display/store the R, G, B values.

    None of this looks to me like it's rocket science.

    Compilers can produce warnings - make the compiler programmers happy: Use them!
    Please don't PM me for help - and no, I don't do help over instant messengers.

  3. #3
    Confused Magos's Avatar
    Join Date
    Sep 2001
    System.Drawing.Bitmap has a GetPixel method.

    Give a man a fish and you feed him for a day.
    Teach a man to fish and you feed him for a lifetime.

  4. #4
    Registered User
    Join Date
    May 2009
    ok thx I'll see if this does the trick

  5. #5
    Registered User
    Join Date
    Mar 2009
    Here's something I've just thrown together which should do what you're asking for:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.IO;
    namespace ShowColorTest
        public class Form1
            private IContainer components = null;
            private PictureBox pictureBox1;
            private Button button1;
            protected override void Dispose(bool disposing)
                if (disposing && (components != null))
            private void InitializeComponent()
                this.pictureBox1 = new PictureBox();
                this.button1 = new Button();
                this.pictureBox1.Anchor = ((AnchorStyles)((((AnchorStyles.Top | AnchorStyles.Bottom) | AnchorStyles.Left) | AnchorStyles.Right)));
                this.pictureBox1.Location = new Point(12, 12);
                this.pictureBox1.Name = "pictureBox1";
                this.pictureBox1.Size = new Size(260, 215);
                this.pictureBox1.TabIndex = 0;
                this.pictureBox1.TabStop = false;
                this.pictureBox1.MouseClick += new MouseEventHandler(this.pictureBox1_MouseClick);
                this.button1.Anchor = ((AnchorStyles)((AnchorStyles.Bottom | AnchorStyles.Right)));
                this.button1.Location = new Point(197, 233);
                this.button1.Name = "button1";
                this.button1.Size = new Size(75, 23);
                this.button1.TabIndex = 1;
                this.button1.Text = "load picture";
                this.button1.UseVisualStyleBackColor = true;
                this.button1.Click += new EventHandler(this.button1_Click);
                this.AutoScaleDimensions = new SizeF(6F, 13F);
                this.AutoScaleMode = AutoScaleMode.Font;
                this.ClientSize = new Size(284, 264);
                this.Name = "Form1";
                this.Text = "Form1";
            public Form1()
            private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
                if (this.pictureBox1.Image == null)
                    MessageBox.Show("load a picture first!");
                Color c = ((Bitmap)this.pictureBox1.Image).GetPixel(e.X, e.Y);
                StringBuilder sb = new StringBuilder();
                sb.AppendLine("Results for co-ordinate: " + e.X + ", " + e.Y);
                sb.AppendLine("R = " + c.R + ", G = " + c.G + ", B = " + c.B);
            private void button1_Click(object sender, EventArgs e)
                OpenFileDialog o = new OpenFileDialog();
                o.Multiselect = false;
                o.Filter = "Supported file types (*.bmp;*.jpg;*.gif)|*.bmp;*.jpg;*.gif|Bitmap (*.bmp)|*.bmp|JPeg (*.jpg)|*.jpg|Gif (*.gif)|*.gif";
                if (o.ShowDialog() == DialogResult.OK)
                    byte[] buffer = File.ReadAllBytes(o.FileName);
                    this.pictureBox1.Image = new Bitmap(new MemoryStream(buffer));

  6. #6
    Registered User
    Join Date
    May 2009
    Wow thanks, this is realy something, I'll definitely try this. Is it possible to apply this to a wider area, or just to one pixel.
    I'm supposed to show basic AI movements (chasing, evading and patroling) in a simple example - this is my task for the end of 3. year at ETF university in Croatia (sort of pre-diploma paper). The problem is I'v never had any lessons in programing graphics. So I'll try to make a program that will recognize obstacles by their color (eg you can pass trough white, but not trough red etc.). I know this is nowhere near the real way this gets done, but for obvious reason I have to be creative. Of course I appreciate your help, and if you have any suggestions how this could be done easier please reply

    TNX again

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Turtle Graphics, how does it work?
    By freddyvorhees in forum C++ Programming
    Replies: 15
    Last Post: 08-28-2009, 09:57 AM
  2. Graphics Programming :: Approach and Books
    By kuphryn in forum Windows Programming
    Replies: 4
    Last Post: 05-11-2004, 08:33 PM
  3. egavga.bgi problem
    By sunil21 in forum A Brief History of
    Replies: 3
    Last Post: 09-22-2003, 05:06 PM
  4. Graphics Devices and Cprintf clash
    By etnies in forum C Programming
    Replies: 6
    Last Post: 05-09-2002, 11:14 AM