Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.01.2016, 12:03   #1
darkwellroad
Пользователь
 
Регистрация: 01.09.2013
Сообщений: 83
Печаль Canvas.Pixels[X,Y] := -1 What??

Короче, качаю капчу с популярного интернет-ресурса..
Код:
      try
        HTTP.Get(URL, ResStream);
        ResStream.Position := 0;
      except
      end;
      if HTTP.ResponseCode = 200 then
        begin
          JPEG.LoadFromStream(ResStream);
          CaptchaBMP.Assign(JPEG);
          for X := 0 to CaptchaBMP.Width - 1 do
            for Y := 0 to CaptchaBMP.Height - 1 do
              AppForm.Memo1.Lines.Add(IntToStr(CaptchaBMP.Canvas.Pixels[X, Y]));
          Resultate := GoodR;
        end
      else
        Resultate := ErrorR;
Результат выглядит так:
Код:
16381942
16381942
16381942
16381942
{Всегда разное место... Далее все -1, хотя там присутствуют цветные пиксели}
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
Что за фигня? Также получается, если получать RGB через GETRValue и т.п. И всегда почему-то в разном месте. Картинки сохраняю.. Выглядят обычно.
darkwellroad вне форума Ответить с цитированием
Старый 27.01.2016, 12:08   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а на картинке часом не белый в этом месте?

или же дайте ссылку на капчу, может игры с прозрачностью.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.01.2016, 12:11   #3
darkwellroad
Пользователь
 
Регистрация: 01.09.2013
Сообщений: 83
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
а на картинке часом не белый в этом месте?
Нет.. Все пиксели на картинке имеют равные RGB, т.е. картинка черно-белая. В цикле после момента, когда появляется первая -1 еще есть уйма серых и черных пикселей. Почему их всех кидает в -1?
Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
или же дайте ссылку на капчу, может игры с прозрачностью.
Скинул в ЛС. Везде прозрачность 255.. Если смотреть сохраненную картинку в редакторе.. Смотрел на тот пиксель, после которого начинается все эта лабуда - ничем не примечателен..

Последний раз редактировалось darkwellroad; 27.01.2016 в 12:20.
darkwellroad вне форума Ответить с цитированием
Старый 27.01.2016, 13:07   #4
darkwellroad
Пользователь
 
Регистрация: 01.09.2013
Сообщений: 83
По умолчанию

Че никто не знает?
darkwellroad вне форума Ответить с цитированием
Старый 27.01.2016, 13:44   #5
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

У вас циклы не в том порядке.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 27.01.2016, 15:56   #6
darkwellroad
Пользователь
 
Регистрация: 01.09.2013
Сообщений: 83
По умолчанию

Цитата:
Сообщение от Pavia Посмотреть сообщение
У вас циклы не в том порядке.
А как правильно? X - ширина, Y - высота..
darkwellroad вне форума Ответить с цитированием
Старый 27.01.2016, 17:04   #7
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Вот вам код он выводит картинку по строчкам. Сначала пиксели первой строки затем второй и так далее. А у вас код выводит по столбцам, т.е совершенно в другом порядке, нежели чем принято.
Код:
          for Y := 0 to CaptchaBMP.Height - 1 do
            for X := 0 to CaptchaBMP.Width - 1 do
              AppForm.Memo1.Lines.Add(Format('X-%d;Y-%d;C-%.8X;', [X,Y, CaptchaBMP.Canvas.Pixels[X, Y]]));
Можете сравнить. Тут по столбцам.
Код:
        for X := 0 to CaptchaBMP.Width - 1 do
           for Y := 0 to CaptchaBMP.Height - 1 do
              AppForm.Memo1.Lines.Add(Format('X-%d;Y-%d;C-%.8X;', [X,Y, CaptchaBMP.Canvas.Pixels[X, Y]]));
На будущее советую вам освоить инструменты отладки:
F7, F8 CTRL+F5, Установка BreakPoint.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 27.01.2016, 17:13   #8
darkwellroad
Пользователь
 
Регистрация: 01.09.2013
Сообщений: 83
По умолчанию

Цитата:
Сообщение от Pavia Посмотреть сообщение
Вот вам код он выводит картинку по строчкам. Сначала пиксели первой строки затем второй и так далее. А у вас код выводит по столбцам, т.е совершенно в другом порядке, нежели чем принято.
Код:
          for Y := 0 to CaptchaBMP.Height - 1 do
            for X := 0 to CaptchaBMP.Width - 1 do
              AppForm.Memo1.Lines.Add(Format('X-%d;Y-%d;C-%.8X;', [X,Y, CaptchaBMP.Canvas.Pixels[X, Y]]));
Можете сравнить. Тут по столбцам.
Код:
        for X := 0 to CaptchaBMP.Width - 1 do
           for Y := 0 to CaptchaBMP.Height - 1 do
              AppForm.Memo1.Lines.Add(Format('X-%d;Y-%d;C-%.8X;', [X,Y, CaptchaBMP.Canvas.Pixels[X, Y]]));
На будущее советую вам освоить инструменты отладки:
F7, F8 CTRL+F5, Установка BreakPoint.
Скажите, какая разница, по столбцам или по строчкам? Какое это отношение имеет к определению цвета пикселя? Что по стобцам идти, что по строчкам - результат один. Воспользовался вашим примером. Картинка и результат во вложении. Brakepoin? - Цикл идет в нужном порядке и нужное количество раз. Результат странный.. Ошибок нет при работе цикла. Проверил в debug..
Изображения
Тип файла: bmp 8d7ba0ed64769932949489b05c4a7687.bmp (21.1 Кб, 132 просмотров)
Вложения
Тип файла: zip result.zip (15.1 Кб, 6 просмотров)

Последний раз редактировалось darkwellroad; 27.01.2016 в 17:17.
darkwellroad вне форума Ответить с цитированием
Старый 27.01.2016, 17:30   #9
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

У меня нормально открывает картинку.
Такое бывает если у вас в программе выход за приделы массива или срыв указателя.
Комментируйте часть кода смотрите где ошибка себя проявляет, а где нет.
Когда найдете где именно срыв, то легко исправите.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 27.01.2016, 17:32   #10
darkwellroad
Пользователь
 
Регистрация: 01.09.2013
Сообщений: 83
По умолчанию

Цитата:
Сообщение от Pavia Посмотреть сообщение
У меня нормально открывает картинку.
Такое бывает если у вас в программе выход за приделы массива или срыв указателя.
Комментируйте часть кода смотрите где ошибка себя проявляет, а где нет.
Когда найдете где именно срыв, то легко исправите.
Ну у вас получилось преобразовать картинку в список попиксельно? У меня тоже открывает без ошибок.. Также может ли такое проявляться именно в потоке?
darkwellroad вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TImage, Canvas, Pixels. пропадает изображение J1Mmy Мультимедиа в Delphi 7 29.07.2013 22:59
Bmp -> Pixels array alexprey Мультимедиа в Delphi 1 02.06.2010 14:47
Pixels[][] или GetPixel(hdc,x,y) Nick0 C++ Builder 5 12.12.2009 16:09
[Del] TCanvas.pixels → HBitMap Alex Cones Win Api 11 21.11.2009 19:54
10.0 mega pixels Paragvay_ Свободное общение 7 08.02.2008 14:53