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