12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- // SPDX-License-Identifier: GPL-3.0-only
- program createresource;
- {$mode objfpc}{$H+}
- uses
- {$IFDEF UNIX}{$IFDEF UseCThreads}
- cthreads,
- {$ENDIF}{$ENDIF}
- Interfaces, // this includes the LCL widgetset
- BGRABitmap, BGRALazPaint, BGRABitmapTypes,
- BGRALazResource, BGRAMultiFileType,
- LazFileUtils, LazUTF8Classes, SysUtils,
- LCVectorOriginal, LCVectorShapes, LCVectorPolyShapes;
- {$R *.res}
- const
- imgWidth = 24;
- imgHeight = 24;
- procedure MakeResource(AVectorImagesPath: string; AListFile: string; AResourceFile: string; ACombinedImage: string);
- var
- search: TSearchRec;
- res: TMultiFileContainer;
- fs: TFileStreamUTF8;
- lzp: TBGRALazPaintImage;
- bigImg: TBGRABitmap;
- i, idxEntry: Integer;
- mem: TMemoryStreamUTF8;
- combineList: TStringListUTF8;
- begin
- AVectorImagesPath := StringReplace(AVectorImagesPath,'/',PathDelim,[rfReplaceAll]);
- AListFile := StringReplace(AListFile,'/',PathDelim,[rfReplaceAll]);
- AResourceFile := StringReplace(AResourceFile,'/',PathDelim,[rfReplaceAll]);
- ACombinedImage := StringReplace(ACombinedImage,'/',PathDelim,[rfReplaceAll]);
- if FindFirstUTF8(AVectorImagesPath+'*.lzp', faAnyFile, search)=0 then
- begin
- res := TLazResourceContainer.Create;
- writeln('Adding files to resource...');
- repeat
- fs := TFileStreamUTF8.Create(AVectorImagesPath+search.name, fmOpenRead);
- res.Add(EntryFilename(search.name), fs, false, false);
- fs.Free;
- writeln(search.Name);
- until FindNextUTF8(search)<>0;
- FindClose(search);
- combineList:= TStringListUTF8.Create;
- if FileExists(AListFile) then
- combineList.LoadFromFile(AListFile)
- else
- begin
- for i := 0 to res.Count-1 do
- combineList.Add(res.Entry[i].Name+'.'+res.Entry[i].Extension);
- combineList.SaveToFile(AListFile);
- end;
- for i := combineList.Count-1 downto 0 do
- if combineList[i]='' then combineList.Delete(i);
- res.RawStringByFilename[ExtractFilename(AListFile)] := combineList.CommaText;
- res.SaveToFile(AResourceFile);
- writeln('Done Resource');
- lzp := TBGRALazPaintImage.Create;
- bigImg := TBGRABitmap.Create(imgWidth, imgHeight*combineList.Count);
- for i := 0 to combineList.Count-1 do
- begin
- idxEntry := res.IndexOf(EntryFilename(combineList[i]));
- if idxEntry = -1 then
- begin
- writeln('Cannot find "'+combineList[i]+'"');
- continue;
- end;
- mem := TMemoryStreamUTF8.Create;
- res.Entry[idxEntry].CopyTo(mem);
- mem.Position:= 0;
- lzp.LoadFromStream(mem);
- mem.Free;
- lzp.Resample(imgWidth,imgHeight,rmFineResample);
- lzp.Draw(bigImg,0,i*imgHeight);
- end;
- combineList.Free;
- res.Free;
- bigImg.SaveToFileUTF8(ACombinedImage);
- writeln('Done PNG');
- bigImg.Free;
- end;
- end;
- begin
- MakeResource('../vector/', '../vectorimages.lst', '../vectorimages.lrs', '../vectorimages'+inttostr(imgHeight)+'.png');
- MakeResource('../vector/fill/', '../fillimages.lst', '../fillimages.lrs', '../fillimages'+inttostr(imgHeight)+'.png');
- end.
|