1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
   | uses
 Graphics;
 
const
 MAXIMUM_BYTE_VALUE = 255;
 
 COLOR_COMPONENTS_NUMBER = 3;
 
 FIRST_COLOR_COMPONENT = 0;
 
 SECOND_COLOR_COMPONENT = 1;
 
 THIRD_COLOR_COMPONENT = 2;
 
type
 TRGBColor = record
              Blue, Green, Red: Byte
             end;
 
 PRGBColor = ^TRGBColor;
 
 TColor = array [0 .. COLOR_COMPONENTS_NUMBER - 1] of Double;
 
 TPixels = array of array of TColor;
 
 TImage = record
           Height, Width: LongInt;
           Pixels: TPixels
          end; 
 
function Make(C1, C2, C3: Double): TColor;
begin
 Result[FIRST_COLOR_COMPONENT] := C1;
 Result[SECOND_COLOR_COMPONENT] := C2;
 Result[THIRD_COLOR_COMPONENT] := C3
end;
 
procedure Load(var Image: TImage; Filename: String);
var
 Picture: TPicture;
 Bitmap: TBitmap;
 Row, Pixel: PByte;
 BPL, Y, X: LongInt;
 Color: TRGBColor;
begin
 Picture := TPicture.Create;
 Picture.LoadFromFile(Filename);
 Bitmap := TBitmap.Create;
 Bitmap.BeginUpdate(FALSE);
 Bitmap.Height := Picture.Height;
 Bitmap.Width := Picture.Width;
 Bitmap.PixelFormat := pf24bit;
 Bitmap.Canvas.Draw(0, 0, Picture.Graphic);
 Image.Height := Bitmap.Height;
 Image.Width := Bitmap.Width;
 SetLength(Image.Pixels, Image.Height, Image.Width);
 Row := Bitmap.RawImage.Data;
 BPL := Bitmap.RawImage.Description.BytesPerLine;
 for Y := 0 to Image.Height - 1 do
  begin
   Pixel := Row;
   for X := 0 to Image.Width - 1 do
    begin
     Color := PRGBColor(Pixel)^;
     Image.Pixels[Y, X] := Make(Color.Red / MAXIMUM_BYTE_VALUE, Color.Green / MAXIMUM_BYTE_VALUE, Color.Blue / MAXIMUM_BYTE_VALUE);
     Inc(Pixel, COLOR_COMPONENTS_NUMBER)
    end;
   Inc(Row, BPL)
  end;
 Bitmap.EndUpdate(FALSE);
 Bitmap.Free;
 Picture.Free
end; | 
Partager