Bitmap/Read a PPM file: Difference between revisions
Content added Content deleted
MaiconSoft (talk | contribs) No edit summary |
MaiconSoft (talk | contribs) |
||
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; |
||
⚫ | |||
var |
|||
⚫ | |||
⚫ | |||
L := round(0.2126 * GetRValue(Color) + 0.7152 * GetGValue(Color) + 0.0722 * |
|||
GetBValue(Color)); |
|||
⚫ | |||
⚫ | |||
{ 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 := ColorToGray(ColorToRGB(Self.Canvas.Pixels[i, j])) |
|||
else |
|||
⚫ | |||
ppm.Write(color, 3); |
ppm.Write(color, 3); |
||
end; |
end; |
||
Line 423: | Line 436: | ||
end; |
end; |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
var |
var |
||
p: Integer; |
p: Integer; |
||
ppm: TMemoryStream; |
ppm: TMemoryStream; |
||
⚫ | |||
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 |