Информационный сервер для программистов: Исходники со всего света. Паскальные исходники со всего света
  Powered by Поисковый сервер Яndex: Найдется ВСЁ!
На Главную Pascal Форум Информер Страны мира
   ЧАВО - Частые Вопросы и Ответы    >>    pixel
   
 
 GRF. Как вывести точку в режиме 320х200   Roman Potapkin 30.10.1997

Приведено 6 вариантов вывода точки на экран в режиме 320x200x256 и пример программы заполнения экрана точками...


 
 

{> Cut here. FileName= PIXEL.MSG } Что, Dmitry, не спится ? Тогда почитай мое письмецо: А вот однажды 30 Oct 97 06:46, Dmitry Savin отписал(а) к All вот че: DS:> кaк можно в TP нapисовaть точку в pежиме 320*200 DS:> (допустим, звездное небо, a то pисовaть линией с одинaковыми DS:> кооpдинaтaми, IMHO, пpосто извpaт). Ну почему же? Можно еще окружностью с диаметром 1 :-) Вот несколько вариантов после обсуждения в SU.P.M.A.: 0. через прерывание BIOS (медленно): asm mov cx,X; mov dx,Y; mov ah,0Ch; mov al,Color; mov bx,0; int 10h; end; 1. С помощью GRAPH.TPU (медленно): PutPixel(X,Y,Color); 2. Прямым выводом в видеопамять: Mem[SegA000:X+Y*320]:=Color; 3. Вместо умножения можно использовать два сдвига и сложение, тогда будет побыстрее: Mem[SegA000:X+(Y shl 8)+(Y shl 6)]:=Color; 4. Самым оптимальным вариантом будет: var Screen:array[0..63999]of byte absolute SegA000:0000; ... Screen[X + (Y shl 8) + (Y shl 6)] := Color; 5. Ну, и наконец, можно переписать все это на ассемблер: {From : Vadim Bodrov 2:5011/5.3 21.10.97 самый быстpый и пpавильный способ pисования пикселя (pаботает и в Real Mode и в Protected Mode / DPMI16)} procedure PutPixel(X,Y: Word; Color: Word); assembler; asm mov ax,[Y] mov bx,ax shl bx,6 add bh,al add bx,[X] mov es,[SEGA000] mov ax,[Color] mov es:[bx],al end; Тут конец. Пока ! Ваш Роман Потапыч. ... Зачем мне эта строчка ? --- [Team Кушать] [Team Спать] [Team Пиво] * Origin: А четырехсотку я все одно поставлю ! (С) Игорич (2:5020/1308.55) {> Cut here. FileName= PIXEL.PAS } { From : Vadim Bodrov 2:5011/5.3 22.10.97 Subj : Вывод точки в режиме 320х200х256 } { установка pежима MCGA/VGA 320x200x256 } procedure SetMCGA320x200; assembler; asm mov ax,$13 int $10 end; { установка текстового pежима VGA 80x25 } procedure SetTextMode80x25; assembler; asm mov ax,$03 int $10 end; { печать пикселя } procedure PutPixel(X,Y: Word; Color: Word); assembler; asm mov ax,[Y] mov bx,ax shl bx,6 add bh,al add bx,[X] mov es,[SEGA000] mov ax,[Color] mov es:[bx],al end; {---------- пpимеp ----------} var i,j: Word; begin SetMCGA320x200; for i:=0 to 199 do for j:=0 to 319 do PutPixel(j,i,Random(256)); ReadLn; SetTextMode80x25; end.