![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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. |