Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Цвет пикселя.


Автор: Хоббит 15.11.2005, 22:21
Имеется картинка (Image) ... нужно получить цвет пикселя с кординатами X Y .... что то не нашел такого метода ни в этом обьекте нив обьекте panel // ни где еще ..... Кто знает как?

Автор: stab 16.11.2005, 04:42
У Image нет таких возможностей, есть у Bitmap, Bitmap.GetPixel(). Я так понимаю ты используешь PictureBox.Image , тогда попробуй так:

Код

private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
    BackColor = ((Bitmap) pictureBox1.Image).GetPixel(e.X, e.Y);
}

Автор: mr.DUDA 16.11.2005, 08:32
Добавлю, что если требуется считывать более чем один пиксел, и часто, тогда GetPixel - не самый лучший вариант; выгоднее прочитать всю картинку в массив и работать с массивом, чем с GDI+. Пример:
Код
using System;
using System.Drawing;
using System.Drawing.Imaging;

namespace ConsoleApplication1
{
    class Class1
    {
        static void Main(string[] args)
        {
            string filePath = args[0];
            Bitmap bmp = (Bitmap)Bitmap.FromFile(filePath);
            int W = bmp.Width, H = bmp.Height;

            Color[,] array = new Color[H, W];

            BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, W, H), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
            IntPtr ptr = bmpData.Scan0;
            byte[] rgbValues = new byte[W*H*4];
            System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, rgbValues.Length);
            bmp.UnlockBits(bmpData);
                
            int counter = 0;
            for (int i=0; i<H; i++)
                for (int j=0; j<W; j++, counter+=4)
                    array[i, j] = Color.FromArgb(rgbValues[counter], rgbValues[counter+1], rgbValues[counter+2]);
        }
    }
}

Автор: Хоббит 16.11.2005, 10:28
проблему решил сам .... Спасибо а то что полсказали как пееписать это в массив ...
а все же можно ли вывести одну точку не в Image а сразу на экран?
Добавлено @ 10:28
проблему решил сам .... Спасибо а то что полсказали как пееписать это в массив ...
а все же можно ли вывести одну точку не в Image а сразу на экран?

Автор: mr.DUDA 16.11.2005, 11:18
Цитата
а все же можно ли вывести одну точку не в Image а сразу на экран?

По идее, как-то можно, поигравшись с HDC, Graphics и GetDC(null), но как именно - не скажу т.к. не проверял.

Автор: -ser- 17.11.2005, 09:15
Цитата
Цитата (Хоббит @ 16.11.2005, 10:28)
а все же можно ли вывести одну точку не в Image а сразу на экран? 
что-то я торможу. это уже следующий вопрос?

не знаю как присоединить сюда простенькую демо, а то бы взглянул то или не то тебе надо. в частности она показывает параметры цвета текущего пиксела на который указывает мышь. тебе надо что-то подобное, только с конкретными координатами в имидже или это уже проехали?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)