Member 13623647 Ответов: 1

C# getpixel() не возвращает правильное значение.


Я использую серое изображение, которое команда getpixel() должна дать мне низкое число для черной области и высокое значение для белой области. Но не работайте тонко для меня и не давайте мне неправильное значение для каждого региона.

Например, в каком-то белом регионе этот код дает мне номер 1(связанный с черным), а в каком-то черном регионе дает мне 150 или более.

КТО-НИБУДЬ МОЖЕТ МНЕ ПОМОЧЬ??

Что я уже пробовал:

Я использую этот код в dotspatial вместо элемента управления PictureBox:

public partial class formMain : Form
{

    Bitmap b = new Bitmap(@"F:\Hrit1\MSG1MostO.bmp");

    private void mapMain_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
    {

        Coordinate c= mapMain.PixelToProj(new System.Drawing.Point(e.X , e.Y ));

        int pixel = Convert.ToInt32(c.X);
        int line = Convert.ToInt32(c.Y);
        if (line < 0 || pixel < 0 || line > 850 || pixel > 1145)
        {
            line = 0;
            pixel = 0;
        }

        Color col = b.GetPixel(pixel, line);

        textBox1.Text = col.ToString();

}
  }

1 Ответов

Рейтинг:
1

Jochen Arndt

GetPixel() возвращает Цветовая Структура (Система.Рисование)[^]. При изображениях в серой шкале все компоненты RGB будут иметь одинаковое значение. Так что используйте один из R, G, и B свойства для получения интенсивности. Возвращаемое значение-это a byte где 0 - черный, а 255-белый.


Member 13623647

- Вот именно.
например: один из моих выходных данных в textbox1-это "color [A=255,R=85,G=85,B=85]".
когда я использую этот код :
"элемент textbox1.Текст = колонка.Р.Метод toString();"
Я получаю номер 85.
Но мой вопрос совсем в другом.
Я говорю, что когда я использую приведенный выше код для чтения значения пикселя getpixel() не работает точно.
Например, в какой-то белой области выше кода дайте мне номер 1(связанный с черным), а в какой-то черной области дайте мне 150 или больше.
Спасибо за Ваш вклад .

вы можете решить мою проблему?

F-ES Sitecore

Это может быть как-то связано с образом, который вы используете. Создайте новый образ, который, как вы знаете, является чисто белым или чисто черным, и поэкспериментируйте с ним.

Jochen Arndt

Извини, что я проглядел DotSpatial.

Но откуда вы знаете, что это неправильно?

Вы открыли файл в растровом редакторе и проверили пиксель в том же положении? Я бы предположил, что вы получите то же самое значение.

Даже области, обнаруженные как "белые", могут содержать некоторые темные пиксели и наоборот.

Member 13623647

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

Jochen Arndt

Извините, я понятия не имею и не знаю QGis.

Но все, что у вас есть-это растровый файл. Это сохраняет пиксели как [A]RGB line wise, и вы получаете цвет в определенной точке. Это будет то же самое, когда вы откроете файл с помощью растрового редактора, такого как MS Paint, и проверите в той же позиции (ваши линейные и пиксельные переменные).

Если результат не соответствует ожиданиям, он может быть получен в другом месте вашего кода (возможно, в других методах класса mapMain) или в преобразовании PixelToProj ().