Форум: "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.012 c