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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.10.2012, 15:00   #1
hiho
Форумчанин
 
Регистрация: 29.04.2008
Сообщений: 100
По умолчанию TBitmap + поток

Добрый день. Возникла проблема с поиском пиксела в TBitmap. Ищу вот так:

Код:
function FindPixel(Scr : TBitmap; Rect : TRect) : TPoint;
var
  i,j : integer;
  Width, Height : integer;
begin
    Width := Rect.Right - Rect.Left;
    Height := Rect.Bottom - Rect.Top;
    for i := 1 to Width do for j := Height downto 1 do
      if (Scr.Canvas.Pixels[i,j] = RGB(254,69,95)) then begin
        ShowMessage(IntToStr(Scr.Canvas.Pixels[i,j]) + '  ' + IntToStr(i) + ':' + IntToStr(j)); //6243838
        Result := Point(i,j);
        Exit;
      end;
  end;
end;
Если пробую искать просто по клику мыши, то пиксель отлично находится, но как только переношу это всё в поток, то ничего не происходит.

Вызов из потока:

Код:
procedure TPrimeThrd.Execute;
var
  Scr : TBitmap;
begin
  Scr := TBitmap.Create;
  GetWindowRect(hWin, Rect);
  with Scr do begin
    Width := Rect.Right - Rect.Left;
    Height := Rect.Bottom - Rect.Top;
    BitBlt(Scr.Canvas.Handle, 0, 0, Width, Height, GetDC(hWin), 0,0, SRCCOPY);
  end;
  p := FindPixel(Scr, Rect);
  Scr.Free
end;
Вызов по клику:

Код:
var
  Scr : TBitmap;
...
  Scr := TBitmap.Create;
  GetWindowRect(hWin, Rect);
  with Scr do begin
    Width := Rect.Right - Rect.Left;
    Height := Rect.Bottom - Rect.Top;
    BitBlt(Scr.Canvas.Handle, 0, 0, Width, Height, GetDC(hWin), 0,0, SRCCOPY);
    p := FindPixel(Scr, Rect);
Если сохранять Bitmap в файл, то в обоих случаях скрин снимается верно.
Может кто проверить, а то у меня уже все идеи закончились
hiho вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Класс запускает поток, который заполняет этот класс. Обмен класс <=> поток. Человек_Борща Общие вопросы Delphi 8 27.02.2012 23:24
Поток. Не получается создать поток. Выдает ошибки при запуске bigory Общие вопросы по Java, Java SE, Kotlin 3 23.09.2010 00:40
Проблема с TBitmap ImmortalAlexSan Общие вопросы Delphi 2 29.08.2010 10:52
движение TBitMap Juffin Мультимедиа в Delphi 1 14.04.2009 21:34
TBitmap odi_noki Мультимедиа в Delphi 17 25.10.2008 09:53