Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2005.09.04;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "Media";
Текущий архив: 2005.09.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.011 c
3-1121960535
Djek
2005-07-21 19:42
2005.09.04
Вывод неповторяющегося значения поля в ComboBox


1-1124171980
~ShamaN~
2005-08-16 09:59
2005.09.04
ComboBox


14-1123802724
Kerk
2005-08-12 03:25
2005.09.04
American Beauty


9-1115834930
BigMac
2005-05-11 22:08
2005.09.04
Экранные координаты?


9-1115476689
grouzd[E]v
2005-05-07 18:38
2005.09.04
OpenGL - Стереометрия, мать ее!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский