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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.06.2014, 22:26   #1
HellMercenariess
Форумчанин
 
Аватар для HellMercenariess
 
Регистрация: 27.07.2009
Сообщений: 547
По умолчанию Величина синей полоски, количество синего цвета

Раньше обращался к каждому пикселю через канву, но возникла проблема с быстродействием, добрые люди посоветовали делать это через Scanline

Код:
 Type
 PRGBArray = ^TRGBArray;
 TRGBArray = Array[0..65535] of TRGBTriple;
  var
 RowBMP: PRGBTripleArray;
   Line: PRGBArray;
 i, j, Pix: Integer;
 _r, _g, _b: Extended;
  clr: TColor;
begin
  Result:=0;
 _r:= 0; _g:= 0; _b:= 0;
 Result:= clWhite;
 B.PixelFormat:= pf24bit;
 For j:= 0 To B.Height - 1 Do
  begin
   Line:= B.ScanLine[j];
   For i:= 0 To B.Width - 1 Do
    begin
     _r:= _r + Line[i].rgbtRed;
     _g:= _g + Line[i].rgbtGreen;
     _b:= _b + Line[i].rgbtBlue;
    end;
  Result:=Round(_g);
так когда я через канву попиксельно перебирал, то зная что максимально 1 канал цвета может быть 255 то было достаточно просто, я считал количество пикселей с синий>190 и получалось число от 100 до 8к.

Сейчас вот через сканлайн просто считается количесвто синьки и числа просто огромные я совсем не понимаю как работать с ними:
Цитата:
3847246
3847246
3869229
945118
945118
945118
894803
862484
947531
886261
961080
935868
979615
960473
980651
885164
885390
885390
885514
885514
885555
885555
885658
885651
885774
944122
931584
917534
889609
976489
976489
976489
976489
946140
946140
946140
1475775
1475775
1396267
1399141
755535
861603
775751
705349
693372
669241
741520
772935
"Виновник этого парада,он не дурак, ушел как надо!" Похороны панка.
HellMercenariess вне форума Ответить с цитированием
Старый 15.06.2014, 23:06   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

Цитата:
Код:
_b:= _b + Line[i].rgbtBlue;
Это не счёт количества, это складывание величин синей составляющей пикселя, количество пикселей с большой составляющей синего цвета считать надо так
Код:
if Line[i].rgbtBlue > 190 then _b:= _b + 1;
Цитата:
Код:
Result:=Round(_g);
А это не вывод "синьки", а вывод "зелёнки". Синьки меньше надо использовать.
phomm вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
WinForms C# количество пикселей одного цвета Любимая Windows Forms 2 29.04.2014 09:28
Дан вещественный вектор A(n). Нужно найти количество элементов в векторе, абсолютная величина которых больше 7 (Паскаль) vladicvladic123 Помощь студентам 4 03.12.2013 19:23
Инверсия синей компоненты изображения Nice Plant Мультимедиа в Delphi 7 21.10.2013 15:21
Рекурсия: Дается длина полоски из клеточек и 3 длины: полосок красного,синего и желтого цвета.Требуется набрать заданную длину MagAragorn Паскаль, Turbo Pascal, PascalABC.NET 14 26.04.2013 15:02
Количество пикселей определенного цвета zih Общие вопросы Delphi 4 20.10.2010 23:57