Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.10.2015, 00:36
Аватар для Alloc
Alloc Alloc вне форума
Начинающий
 
Регистрация: 17.09.2014
Сообщения: 104
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Как пробежаться в цикле по Х координате вдоль картинки

Приветы!

Многоуважаемые форумчане, помогите разобраться.. Собственно Сабж.

Вот кусочек кода что бы лучше понять о чем я:

Код:
Type
  TRGBTripleArray = ARRAY[Word] of TRGBTriple;
  pRGBTripleArray = ^TRGBTripleArray;
var
  h1: HWND;
  DC: HDC;
  bmp: TBitmap;
  Point: TPoint;
  x, y: Integer;
  PicArray: pRGBTripleArray;
begin
  Point.X:= 322;
  Point.Y:= 514;
  Windows.ClientToScreen(h1,Point);

  bmp := TBitmap.Create;
  bmp.PixelFormat := pf32bit;
  bmp.Width := 346; bmp.Height := 40;
try
    BitBlt(bmp.Canvas.Handle, 0, 0, bmp.Width, bmp.Height, dc, Point.X, Point.Y, SRCCOPY);

    for x := 0 to bmp.Width - 1 do
    begin
      PicArray := bmp.ScanLine[x];
      ...
      ...
    end;
  finally
    bmp.Free;
    ReleaseDC(h1, dc);
  end;
end;

Вообщем необходимо пробежаться не по всему изображению а только по X, вдоль него, при этом координата Y уже установлена и не должна меняться. Проще говоря, на определенной высоте пройтись вдоль всего изображения. Как это сделать? Да, и будьте добры, подскажите как правильно использовать ScanLine в данном случае. Заранее спасибо.

Последний раз редактировалось Alloc, 17.10.2015 в 01:03.
Ответить с цитированием
  #2  
Старый 17.10.2015, 18:32
Аватар для Vayrus
Vayrus Vayrus вне форума
Исполняемый Ретровирус
 
Регистрация: 09.08.2008
Адрес: Umbrella Corporation
Сообщения: 743
Репутация: 1293
По умолчанию

Примерно как-то так, если что не напутал:
Код:
 
    dstPixel := Bmp1.ScanLine[Y];
    for X := 0 to Width - 1 do
    begin
      with dstPixel^ do
      begin
        rgbRed := dstPixel^.rgbRed;
        rgbGreen := dstPixel^.rgbGreen;
        rgbBlue := dstPixel^.rgbBlue;
        Inc(srcPixel);
      end;
      Inc(dstPixel);
    end;
Ответить с цитированием
Этот пользователь сказал Спасибо Vayrus за это полезное сообщение:
Alloc (17.10.2015)
  #3  
Старый 17.10.2015, 21:57
Аватар для Alloc
Alloc Alloc вне форума
Начинающий
 
Регистрация: 17.09.2014
Сообщения: 104
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Большое Вам спасибо за ответ Vayrus, думая это то что надо. А дальше проверять на цвет так?

Код:
var
  delta: Variant;
begin
delta:= 160;
dstPixel := Bmp1.ScanLine[Y];
for X := 0 to Width - 1 do
begin
  with dstPixel^ do
  begin
    rgbRed := dstPixel^.rgbRed;
    rgbGreen := dstPixel^.rgbGreen;
    rgbBlue := dstPixel^.rgbBlue;
    Inc(srcPixel);
  end;
    if Abs(GetRValue(dstPixel^.rgbRed) - 160) < delta and
       Abs(GetGValue(dstPixel^.rgbGreen) - 170) < delta and
       Abs(GetBValue(dstPixel^.rgbBlue) - 170) < delta then
       x:=x+15; // Тут выдает ошибку "Assignment to FOR-Loop variable 'X'"

  Inc(dstPixel);
end;
end;

Поправьте пожалуйста меня если не сложно, идея такая, если во время сканирования мы наткнулись на определенный цвет - перепрыгиваем на 15 пикселей дальше и продолжаем и дальше в том же духе. Я пытался изобразить нечто подобное, но не вышло. Будьте добры, помогите. Заранее спасибо.

Последний раз редактировалось Alloc, 17.10.2015 в 23:42.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:02.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter