Previous: GetPalette procedure To the Table of Content Next: GetRGBPalette procedure

- 4.37.2.53 -
Standard Units
Graph Unit
Graph Unit Procedures and Functions

GetPixel function

Targets: MS-DOS, Win32

This function gets the pixel value (color) at (X,Y). Declaration:
function GetPixel(X, Y: Longint): DWORD;
Return Value: For 256-color modes - number from the color table. For HiColor/TrueColor modes - real color as it is shown below:
15-bit modes
X
5 bits
5 bits
5 bits
16-bit modes
5 bits
6 bits
5 bits
24-bit modes
8 bits
8 bits
8 bits
32-bit modes
8 bits
8 bits
8 bits
8 Bits
Typical Usage:
Color:=GetPixel(100, 200);
If GetPixel(myX, myY) then ...
Sample Code: Program GetPixelDemo;
{ Linquistic High School # 20    }
{ GetPixel Sample program      }
Uses Crt,Graph;
const
  r  = 20;                        { Radius of targets        }
  NumberOfBombs=100;     { Number of bombs       }
type
  PlazmaBall=record
    x,y: Integer;                { Coordinates,             }
    OldX,OldY: Integer;       { old coordinates         }
    Color:Integer;               { and color for an object}
  end;
var
  { Oops, we are crashed }
  buzz: boolean;
  {A loop variable}
  i:Integer;
  { Temp color variable }
  col: Integer;
  { Initial coordinates for targets }
  startx,starty:Integer;
  {Object vertical coordinates increment}
  dy :Integer;
  { Here we will store colors and coordinates for our objects}
  MyPlazma: array [1..NumberOfBombs] of PlazmaBall;
begin
  { Initialize the random numbers generator }
  Randomize;
  { Set 256-colours graphics mode }
  SetSVGAMode(640,480,8,LfbOrBanked);
  {Set random initial color and coordinates for each object }
  for i:=1 to NumberOfBombs do
    begin
      MyPlazma[i].x:=Random(GetMaxX);
      MyPlazma[i].y:=Random(GetMaxY div 2);
      MyPlazma[i].Color:=Random(15)+1;
    end;
  { Draw our targets }
  SetFillStyle(SolidFill,Blue);
  SetColor(Blue);
  for i:=1 to 15 do
    begin
       startY:=GetMaxY-150+Random(80);
       StartX:=GetMaxX-i*40;
      { Draw saucer }
       FillEllipse(StartX, StartY, r, (r div 3)+2);
       Line(StartX+7, StartY-6, StartX+10, StartY-12);
       Circle(StartX+10, StartY-12, 2);
       Line(StartX-7, StartY-6, StartX-10, StartY-12);
       Circle(StartX-10, StartY-12, 2);
    end;
  while not KeyPressed do
    begin
      i:=1;
      buzz:=True;
      while buzz do
         begin
         { Increment the object coordinates }
          dy:=Random(2)+1;
          MyPlazma[i].y:=MyPlazma[i].y+dy;
          { Check color at current position }
          col:= GetPixel(MyPlazma[i].x,MyPlazma[i].y);
          if col=Black then
            begin
              { Move on }
              PutPixel(MyPlazma[i].x,MyPlazma[i].y,MyPlazma[i].color);
              Delay(1);
              PutPixel(MyPlazma[i].OldX,MyPlazma[i].OldY,Black);
              { Change old coordinates }
              MyPlazma[i].OldX:=MyPlazma[i].x;
              MyPlazma[i].OldY:=MyPlazma[i].y;
            end
          else
            begin
              { Boom!}
              PutPixel(MyPlazma[i].x+1,MyPlazma[i].y,Black);
              PutPixel(MyPlazma[i].x,MyPlazma[i].y+1,Black);
              PutPixel(MyPlazma[i].x,MyPlazma[i].y-1,Black);
              PutPixel(MyPlazma[i].x-1,MyPlazma[i].y,Black);
              PutPixel(MyPlazma[i].x,MyPlazma[i].y,Black);
              Buzz:=False;
              { Begin new bomb }
              MyPlazma[i].y:=0;
              MyPlazma[i].x:=Random(GetMaxX);
            end;
      { Next bomb? Otherwise start all over again }
      if i>NumberOfBombs then
        i:=1
      else
        i:=i+1;
    end;
  end;
  ReadKey;          { Get the key pressed      }
  CloseGraph;       { Return to the text mode}
end.



Previous: GetPalette procedure To the Table of Content Next: GetRGBPalette procedure
GetPalette procedure Table of Content GetRGBPalette procedure

- 4.37.2.53 -