Bitmap/Read a PPM file: Difference between revisions

Content added Content deleted
No edit summary
Line 387: Line 387:
System.SysUtils,
System.SysUtils,
System.Classes,
System.Classes,
Winapi.Windows,
Vcl.Graphics;
Vcl.Graphics;


Line 393: Line 394:
private
private
public
public
procedure SaveAsPPM(FileName: TFileName);
procedure SaveAsPPM(FileName: TFileName; useGrayScale: Boolean = False);
procedure LoadFromPPM(FileName: TFileName);
procedure LoadFromPPM(FileName: TFileName; useGrayScale: Boolean = False);
end;
end;

function ColorToGray(Color: TColor): TColor;
var
L: Byte;
begin
L := round(0.2126 * GetRValue(Color) + 0.7152 * GetGValue(Color) + 0.0722 *
GetBValue(Color));
Result := RGB(L, L, L);
end;


{ TBitmapHelper }
{ TBitmapHelper }


procedure TBitmapHelper.SaveAsPPM(FileName: TFileName);
procedure TBitmapHelper.SaveAsPPM(FileName: TFileName; useGrayScale: Boolean = False);
var
var
i, j, color: Integer;
i, j, color: Integer;
Line 414: Line 424:
for j := 0 to Self.Width - 1 do
for j := 0 to Self.Width - 1 do
begin
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);
ppm.Write(color, 3);
end;
end;
Line 423: Line 436:
end;
end;


procedure TBitmapHelper.LoadFromPPM(FileName: TFileName; useGrayScale: Boolean = False);
function BigEndianFix(Color: TColor): TColor;
begin
Result := Color;
end;

procedure TBitmapHelper.LoadFromPPM(FileName: TFileName);
var
var
p: Integer;
p: Integer;
ppm: TMemoryStream;
ppm: TMemoryStream;
// buffer: Byte;
sW, sH: string;
sW, sH: string;
temp: AnsiChar;
temp: AnsiChar;
Line 473: Line 480:
while ppm.Read(Color, 3) > 0 do
while ppm.Read(Color, 3) > 0 do
begin
begin
if useGrayScale then
Color := ColorToGray(Color);
Canvas.Pixels[p mod W, p div W] := Color;
Canvas.Pixels[p mod W, p div W] := Color;
inc(p);
inc(p);
Line 484: Line 493:
// Load bmp
// Load bmp
LoadFromFile('Input.bmp');
LoadFromFile('Input.bmp');

// Save as ppm
// Save as ppm
SaveAsPPM('Output.ppm');
SaveAsPPM('Output.ppm');


// Load as ppm
// Load as ppm and convert in grayscale
LoadFromPPM('Output.ppm');
LoadFromPPM('Output.ppm', True);


// Save as bmp
// Save as bmp