Is it possible to display a png using fpimage and using ptcgraph? lazarus / 39-Graphics ---------------------------------------------------------------------- TBMan · 2025-09-02 17:27 I found something, but it isn't working. Any help would be appreciated. Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i program bwtest;uses ptcgraph,fpimage,fpreadpng,fpcanvas, fpimgcanv,ptccrt;var  gm,gd:smallint;  r,c,  x,y:integer;  myImage: TFPMemoryImage;  reader : TFPCustomImageReader;  canvas : tfpcustomcanvas;   color:word;   colors:tfpcolor;     function RGBToInteger(R, G, B: Byte): Integer;   begin     Result := (Integer(B) shl 16) or (Integer(G) shl 8) or Integer(R);   end;   begin   gd := vesa;    Gm := installusermode(800, 600, 256, 2, 10000, 8000);    WindowTitle := 'BW Design';    initgraph(gd, gm, '');    myImage := TFPMemoryImage.Create(400, 400); // larger than file dimensions    Reader := TFPReaderPNG.create;    canvas := tfpimagecanvas.create(myimage);    try      myImage.LoadFromFile('qc.png',reader);    except      // Handle file not found or other load errors      WriteLn('Error loading PNG file');    end;    x := 100; y := 100;  for r := 0 to myImage.Height - 1 do  begin    for c := 0 to myImage.Width - 1 do    begin      color := rgbtointeger(canvas.colors[c,r].red, canvas.colors[c,r].green,canvas.colors[c,r].blue);      PutPixel(x+c, y+r,color);     end;   end;       repeat until keypressed;closegraph; end. ---------------------------------------------------------------------- Thausand · 2025-09-03 02:54 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/pa ckages/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. Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i 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/_5Z1N zpeMhcs/Rut53DRL_DI/AAAAAAAAAdI/XxZbdMkDS1I/s1600- h/color_palette_256_deluxepaint.png  load256ColorPng('color_palette_256_deluxepaint.png');  stop;end. ---------------------------------------------------------------------- TBMan · 2025-09-03 13:12 Thanks! ---------------------------------------------------------------------- Thausand · 2025-09-03 21:10 You welcome TBMan  I tell and sorry, I have make copy-paste you code then adjust and (you and me) forget to have free Image so have leak memory. Please make add Image.Free to have fix. ---------------------------------------------------------------------- TBMan · 2025-09-04 01:58 Thanks again, much appreciated!