Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Определение цвета пикселя

Автор: Xineger 17.10.2004 5:26

Граждане обитатели форума, возник вопрос один к Вам. Ничего подобного на форуме нет, так что решил создать новую тему. Итак.
Допустим, вывел я на экран bmp-шку. И очень надо определить цвет каждого пикселя на экране. Как это сделать? И можно ли потом этот пиксель перекрасить, не меняя всего рисунка?
Модуль для просмотра bmp взят тут же, http://forum.pascal.net.ru/index.php?act=Attach&type=post&id=14456 если быть точным.

Автор: volvo 17.10.2004 6:01

Хочешь определить цвет пикселя -

Color:=GetPixel(x, y);


Изменить:
PutPixel(x, y, Color);


Значения x, y - типа Integer; Color - Word...

Автор: GoodWind 17.10.2004 10:46

а если асмом то вот так:

Код
Function getpixel(x,y : integer):byte;
begin
asm
 mov ax,y
 mov bx,ax
 shl ax,8
 shl bx,6
 add bx,ax
 add bx,x
 mov ax,0a000h
 mov es,ax
 mov al,es:[bx]
 mov @result,al
end;
end;


поставить точку:

Код
procedure putpixel(x,y : integer;color : byte); assembler;
asm
 pusha
 mov ax,y
 mov bx,ax
 shl ax,8
 shl bx,6
 add bx,ax
 add bx,x
 mov ax,0a000h
 mov es,ax
 mov al,color
 mov es:[bx],al
 popa
end;

Автор: GoodWind 17.10.2004 10:59

[offtop]
а зачем bmp-шник выводил, если не секрет ?
просто интересно
[/offtop]

Автор: Altair 17.10.2004 12:07

Кстати второй рисунок вывести не выйдет на экран одновременно с первым.
Палитра первого рисунка изменится!

Автор: Xineger 17.10.2004 16:44

За ответы всем спасибо. БМПшку выводил в качестве лого,и захотелось над ней извращнуться маленько. То бишь применить к ней какие-нибудь эффекты.

Автор: GoodWind 17.10.2004 22:41

вот так и я начинал....
посмотрите, что из меня вышло.... ужас ! lol.gif

Автор: Altair 17.10.2004 22:44

кошмар! lol.gif

Автор: BlackShadow 19.10.2004 1:43

GoodWind, не катит при VGA-режимах sad.gif

Автор: GoodWind 19.10.2004 7:37

Цитата
GoodWind, не катит при VGA-режимах

знаю, зато в 13h mode всё ОК

Автор: GoodWind 19.10.2004 7:39

для тех кто не знает, как войти в 13h:

procedeure goto13h;assembler;
asm
mov ax,$13;
int 10h
end;


так вроде, BlackShadow, поправь ежели не так