File: rawvectorialreadwrite.pas

package info (click to toggle)
lazarus 2.0.0%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 214,460 kB
  • sloc: pascal: 1,862,622; xml: 265,709; cpp: 56,595; sh: 3,008; java: 609; makefile: 535; perl: 297; sql: 222; ansic: 137
file content (80 lines) | stat: -rw-r--r-- 1,792 bytes parent folder | download | duplicates (7)
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
74
75
76
77
78
79
80
{
A very simple raw image format

AUTHORS: Felipe Monteiro de Carvalho

License: The same modified LGPL as the Free Pascal RTL
         See the file COPYING.modifiedLGPL for more details
}
unit rawvectorialreadwrite;

{$ifdef fpc}
  {$mode delphi}
{$endif}

interface

uses
  Classes, SysUtils, dateutils,
  fpcanvas, fpimage,
  intfgraphics, graphtype,
  //avisozlib,
  fpvectorial;

type

  { TvRAWVectorialReader }

  TvRAWVectorialReader = class(TvCustomVectorialReader)
  public
    { General reading methods }
    procedure ReadFromStream(AStream: TStream; AData: TvVectorialDocument); override;
  end;

var
  RAW_IMAGE_WIDTH, RAW_IMAGE_HEIGHT: Integer;

implementation

{ TvRAWVectorialReader }

procedure TvRAWVectorialReader.ReadFromStream(AStream: TStream;
  AData: TvVectorialDocument);
var
  lPage: TvVectorialPage;
  lRasterImage: TvRasterImage;
  AImage: TLazIntfImage;
  lRawImage: TRawImage;
  x, y: Integer;
  lColor: TFPColor;
begin
  // create a TLazIntfImage with 32 bits per pixel, alpha 8bit, red 8 bit, green 8bit, blue 8bit,
  // Bits In Order: bit 0 is pixel 0, Top To Bottom: line 0 is top
  lRawImage.Init;
  lRawImage.Description.Init_BPP24_R8G8B8_BIO_TTB(RAW_IMAGE_WIDTH, RAW_IMAGE_HEIGHT);
  lRawImage.CreateData(True);
  AImage := TLazIntfImage.Create(0,0);

  AImage.SetRawImage(lRawImage);

  for x := 0 to RAW_IMAGE_WIDTH - 1 do
    for y := 0 to RAW_IMAGE_HEIGHT - 1 do
    begin
      lColor.Red := AStream.ReadByte() * $FF;
      AImage.Colors[x, y] := lColor;
    end;

  lPage := AData.AddPage();
  lRasterImage := TvRasterImage.Create(nil);
  lRasterImage.RasterImage := AImage;
  lPage.AddEntity(lRasterImage);
end;

initialization

  RAW_IMAGE_WIDTH := 1024;
  RAW_IMAGE_HEIGHT := 1024;
  RegisterVectorialReader(TvRAWVectorialReader, vfRAW);

end.