|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Как пробежаться в цикле по Х координате вдоль картинки
Приветы!
Многоуважаемые форумчане, помогите разобраться.. Собственно Сабж. Вот кусочек кода что бы лучше понять о чем я: Код:
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
|
||||
|
||||
Примерно как-то так, если что не напутал:
Код:
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
|
||||
|
||||
Большое Вам спасибо за ответ 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. |