1 {
2 A very simple raw image format
3 
4 AUTHORS: Felipe Monteiro de Carvalho
5 
6 License: The same modified LGPL as the Free Pascal RTL
7          See the file COPYING.modifiedLGPL for more details
8 }
9 unit rawvectorialreadwrite;
10 
11 {$ifdef fpc}
12   {$mode delphi}
13 {$endif}
14 
15 interface
16 
17 uses
18   Classes, SysUtils, dateutils,
19   fpcanvas, fpimage,
20   intfgraphics, graphtype,
21   //avisozlib,
22   fpvectorial;
23 
24 type
25 
26   { TvRAWVectorialReader }
27 
28   TvRAWVectorialReader = class(TvCustomVectorialReader)
29   public
30     { General reading methods }
31     procedure ReadFromStream(AStream: TStream; AData: TvVectorialDocument); override;
32   end;
33 
34 var
35   RAW_IMAGE_WIDTH, RAW_IMAGE_HEIGHT: Integer;
36 
37 implementation
38 
39 { TvRAWVectorialReader }
40 
41 procedure TvRAWVectorialReader.ReadFromStream(AStream: TStream;
42   AData: TvVectorialDocument);
43 var
44   lPage: TvVectorialPage;
45   lRasterImage: TvRasterImage;
46   AImage: TLazIntfImage;
47   lRawImage: TRawImage;
48   x, y: Integer;
49   lColor: TFPColor;
50 begin
51   // create a TLazIntfImage with 32 bits per pixel, alpha 8bit, red 8 bit, green 8bit, blue 8bit,
52   // Bits In Order: bit 0 is pixel 0, Top To Bottom: line 0 is top
53   lRawImage.Init;
54   lRawImage.Description.Init_BPP24_R8G8B8_BIO_TTB(RAW_IMAGE_WIDTH, RAW_IMAGE_HEIGHT);
55   lRawImage.CreateData(True);
56   AImage := TLazIntfImage.Create(0,0);
57 
58   AImage.SetRawImage(lRawImage);
59 
60   for x := 0 to RAW_IMAGE_WIDTH - 1 do
61     for y := 0 to RAW_IMAGE_HEIGHT - 1 do
62     begin
63       lColor.Red := AStream.ReadByte() * $FF;
64       AImage.Colors[x, y] := lColor;
65     end;
66 
67   lPage := AData.AddPage();
68   lRasterImage := TvRasterImage.Create(nil);
69   lRasterImage.RasterImage := AImage;
70   lPage.AddEntity(lRasterImage);
71 end;
72 
73 initialization
74 
75   RAW_IMAGE_WIDTH := 1024;
76   RAW_IMAGE_HEIGHT := 1024;
77   RegisterVectorialReader(TvRAWVectorialReader, vfRAW);
78 
79 end.
80 
81