Bitmap/Read a PPM file: Difference between revisions

No edit summary
Line 387:
System.SysUtils,
System.Classes,
Winapi.Windows,
Vcl.Graphics;
 
Line 393 ⟶ 394:
private
public
procedure SaveAsPPM(FileName: TFileName; useGrayScale: Boolean = False);
procedure LoadFromPPM(FileName: TFileName; useGrayScale: Boolean = False);
end;
 
function BigEndianFixColorToGray(Color: TColor): TColor;
var
// bufferL: Byte;
begin
L := round(0.2126 * GetRValue(Color) + 0.7152 * GetGValue(Color) + 0.0722 *
GetBValue(Color));
Result := ColorRGB(L, L, L);
end;
 
{ TBitmapHelper }
 
procedure TBitmapHelper.SaveAsPPM(FileName: TFileName; useGrayScale: Boolean = False);
var
i, j, color: Integer;
Line 414 ⟶ 424:
for j := 0 to Self.Width - 1 do
begin
if useGrayScale then
color := ColorToRGB(Self.Canvas.Pixels[i, j]);
color := ColorToGray(ColorToRGB(Self.Canvas.Pixels[i, j]))
else
color := ColorToRGB(Self.Canvas.Pixels[i, j]);
ppm.Write(color, 3);
end;
Line 423 ⟶ 436:
end;
 
procedure TBitmapHelper.LoadFromPPM(FileName: TFileName; useGrayScale: Boolean = False);
function BigEndianFix(Color: TColor): TColor;
begin
Result := Color;
end;
 
procedure TBitmapHelper.LoadFromPPM(FileName: TFileName);
var
p: Integer;
ppm: TMemoryStream;
// buffer: Byte;
sW, sH: string;
temp: AnsiChar;
Line 473 ⟶ 480:
while ppm.Read(Color, 3) > 0 do
begin
if useGrayScale then
Color := ColorToGray(Color);
Canvas.Pixels[p mod W, p div W] := Color;
inc(p);
Line 484 ⟶ 493:
// Load bmp
LoadFromFile('Input.bmp');
 
// Save as ppm
SaveAsPPM('Output.ppm');
 
// Load as ppm and convert in grayscale
LoadFromPPM('Output.ppm', True);
 
// Save as bmp
478

edits