Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

вопрос про изображения..... [D6, WinXP]


Skorii ©   (2005-04-21 17:46:00) 

Пожскажите пожалуйста как мне сделать такую задачу.

В ожной игре появляется два варианта надписи
1) выиграл
2) проиграл
У меня есть скриншоты этих надписей.
Мне необходимо путем сравнения выяснить какая надпись выдалась и выдать соответствующий звук.
Как мне это реализовать? (я новичок в Дельфи и даже не знаю с чего начать....)

Спасибо заранее.


Skorii   (2005-04-23 22:30:00) [1]

Все, спасибо большое. Немножко подумал и все заработало...:)


Магнитоныч   (2005-04-23 20:59:00) [2]

> Skorii  (23.04.05 18:35) [9]
> Как-то нужно именно маленький кусок вырезать...А как?


Смотри [6].


Skorii   (2005-04-23 18:35:00) [3]

Именно что с чужой игры снимаю....В этом то и весь фокус...
Сравнивать картанки я научился - сделал по-простому
var
i, j,perem1,perem2: integer;
 CurColor: dword;
 r1, g1, b1,  r2, g2, b2
  : byte;

 begin
perem1:=1;

for i:= 1 to 105 do
for j:= 1 to 105 do   begin
 CurColor := Image4.Canvas.Pixels[i, j];
 r1 := getRvalue(CurColor);
 g1 := getGvalue(CurColor);
 b1 := getBvalue(CurColor);
 CurColor := Image5.Canvas.Pixels[i, j];
 r2 := getRvalue(CurColor);
 g2 := getGvalue(CurColor);
 b2 := getBvalue(CurColor);
 if ((r1=r2)and(g1=g2)and(b1=b2)) then  perem2:=10
 else perem1:=0;
end;
if perem1=1 then label1.Caption:='111';
if perem1=0 then label1.Caption:='000';

end;


А вот со съемом кусочка экрана с игры пока не получается...Вернее получается, только почему-то в Image оказывается в левом верхнем углу мой кусок, а размер Image все равно на весь экран, т.е скриншот. И приходится Копиректом вырезать нужный кусок. Но здесь, когда я по таймеру запускаю, то вылезает "нехватка памяти"....
Как-то нужно именно маленький кусок вырезать...А как?


Anton_K   (2005-04-23 13:25:00) [4]

ты САМ рисовал эту картинку

А где написано, что он её сам рисовал? Речь идёт о чужой игре, от которой нет исходников. ИМХО


XProger   (2005-04-23 13:22:00) [5]

"Мне необходимо путем сравнения выяснить какая надпись выдалась и выдать соответствующий звук."
Самая бредовая идея которую я слышал...
А чем тебя var image1: boolean;не устраивает?

Зачем сравнивать, если ты САМ рисовал эту картинку => ты знаешь что ты рисовал...


Магнитоныч   (2005-04-23 11:48:00) [6]

var DC: HDC;
begin
 DC := GetDC(0)
 try
   BitBlt(MyBitmap.Canvas.Handle, 0,0,W,H, DC,X,Y, SrcCopy);
 finally
   ReleaseDC(0, dc);
 end;
end;


Skorii   (2005-04-23 11:33:00) [7]

С этим я разобрался.
Теперь вопрос как с экрана стянуть в Image фрагмент экрана с определенными координатами?


Магнитоныч   (2005-04-22 23:15:00) [8]

http://delphimaster.ru/cgi-bin/forum.pl?id=1114008218&n=7


Kind   (2005-04-22 22:34:00) [9]

Написано ведь
for i := 0 to BytesPerPixel - 1 do // 1, to 4, dep. on pixelformat
количество байт на пиксел, в зависимости от типа рисунка.

В твоей проблеме проще брать кусок картинки в определённом месте, и смотреть какие пиксели находятся в определённом месте. Ведь надпись WIN или LOSE будут разными по форме.


Skorii   (2005-04-22 10:42:00) [10]

Нашел такой код сравнения двух изображений
procedure TForm1.Button1Click(Sender: TObject);
var
  b1, b2: TBitmap;
  c1, c2: PByte;
  x, y, i,
  different: Integer; // Counter for different pixels
begin
  b1 := Image1.Picture.Bitmap;
  b2 := Image2.Picture.Bitmap;
  Assert(b1.PixelFormat = b2.PixelFormat); // they have to be equal
 different := 0;
  for y := 0 to b1.Height - 1 do
  begin
    c1 := b1.Scanline[y];
    c2 := b2.Scanline[y];
    for x := 0 to b1.Width - 1 do
      for i := 0 to BytesPerPixel - 1 do // 1, to 4, dep. on pixelformat
     begin
        Inc(different, Integer(c1^ <> c2^));
        Inc(c1);
        Inc(c2);
      end;
  end;
end;


Не получается воспользоваться....
Что такое BytesPerPixel? Его Дельфи не понимает.....Где его взять?


Skorii   (2005-04-21 18:01:00) [11]

Вопросы еще такие:

1) как с экрана игры в Image вытянуть фрагмент с координатами (350,200, 380, 210) ?
2) как имея фрагмент рисунка в Image (из 1го пункта) в режиме реального времени сравнивать его с этим же фрагментом с экрана игры?


Наверх

Титульная страница Поиск, карта сайта Написать письмо