Yes, can work display png fpimage use ptcgraph but have caveat.
You example have ptcgraph 256 color. png can have many more color and not fit (can, if quantize color but then need palette from you) . If png 256 color then can always make work because png also can have palette.
If use png fpimage TFpColor then color 64-bit (4 x word, is not usual because usual is 32-bit) and need scale down. If image have palette then ptcgraph need use setpalette (
https://www.freepascal.org/daily/packages/graph/ptcgraph/setpalette.html).
Can not make easy example because not know what is colors "qc.png" and not know how convert color. Maybe can tell or give (example) picture ?
PS: this simple very example 8-bit palette and 64-bit color convert for ptcgraph.
program test;
{$mode objfpc}{$h+}
uses
{$ifdef linux}cthreads,{$endif}
sysutils,ptcgraph,ptccrt,
fpimage,fpreadpng;
type
TColorType=packed record
case byte of
0:(r,g,b,a:byte);
1:(value:longword);
end;
function fpColorToColorType(fpColor:TFPColor):TColorType;
begin
result.value:=0;
result.r:=(fpColor.Red shr 8) and $00ff;
result.g:=(fpColor.Green shr 8) and $00ff;
result.b:=(fpColor.Blue shr 8) and $00ff;
end;
procedure start;
var
gm,gd:smallint;
begin
gd:=vesa;
gm:=installusermode(800,600,256,2,10000,8000);
WindowTitle:='BW Design';
initgraph(gd,gm,'');
end;
procedure stop;
begin
repeat until keypressed;
closegraph;
end;
procedure load256ColorPng(Filename:string);
var
Image:TFPMemoryImage;
ColorType:TColorType;
x,y,w,h:integer;
index:integer;
Color:integer;
begin
if FileExists(Filename) then
begin
Image:=TFPMemoryImage.Create(0,0);
try
// have palette load
Image.UsePalette:=true;
Image.LoadFromFile(Filename);
// make palette color image copy to ptcpas
for index:=0 to Image.Palette.Count-1 do
begin
colorType:=fpColorToColorType(Image.Palette[Index]);
SetRGBPalette(index,ColorType.r,ColorType.g,ColorType.b);
end;
// make pixel image copy to ptcpas
x:=100; y:=100;
for w:=0 to Image.Height-1 do
begin
for h:=0 to Image.Width-1 do
begin
Color:=Image.Pixels[w,h];
PutPixel(x+w,y+h,Color);
end;
end;
except
// Handle file not found or other load errors
WriteLn('Error loading PNG file');
end;
end
else writeln(Filename,' not exist!');
end;
begin
start;
// picture: https://bp0.blogger.com/_5Z1NzpeMhcs/Rut53DRL_DI/AAAAAAAAAdI/XxZbdMkDS1I/s1600-h/color_palette_256_deluxepaint.png
load256ColorPng('color_palette_256_deluxepaint.png');
stop;
end.