Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.09.04;
Скачать: CL | DM;

Вниз

вопрос про изображения.....   Найти похожие ветки 

 
Skorii   (2005-04-21 17:46) [0]

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

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

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


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

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

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


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

Нашел такой код сравнения двух изображений
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? Его Дельфи не понимает.....Где его взять?


 
Kind ©   (2005-04-22 22:34) [3]

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

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


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

http://delphimaster.net/view/8-1114008218/


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

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


 
Магнитоныч   (2005-04-23 11:48) [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;


 
XProger ©   (2005-04-23 13:22) [7]

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

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


 
Anton_K ©   (2005-04-23 13:25) [8]

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

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


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

Именно что с чужой игры снимаю....В этом то и весь фокус...
Сравнивать картанки я научился - сделал по-простому
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 все равно на весь экран, т.е скриншот. И приходится Копиректом вырезать нужный кусок. Но здесь, когда я по таймеру запускаю, то вылезает "нехватка памяти"....
Как-то нужно именно маленький кусок вырезать...А как?


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

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


Смотри [6].


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

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



Страницы: 1 вся ветка

Текущий архив: 2005.09.04;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.073 c
3-1121766548
msguns
2005-07-19 13:49
2005.09.04
Координаты текущей ячейки грида


1-1123744158
Bios_
2005-08-11 11:09
2005.09.04
????? вместо строк


11-1106520038
Sphinxx
2005-01-24 01:40
2005.09.04
Как в KOL организовать поиск по компонентам на форме


4-1121696153
ArtemKin
2005-07-18 18:15
2005.09.04
Винты и Винды


14-1123487360
vecna
2005-08-08 11:49
2005.09.04
XSL преобразования...