TPicture.RegisterFileFormat рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдЧреНрд░рд╛рдлрд┐рдХ рдХрдХреНрд╖рд╛рдУрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ

рдиреЛрдЯ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕рднреА рдкрдВрдЬреАрдХреГрдд рдЧреНрд░рд╛рдлрд┐рдХ рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрд▓реНрдлреА рдореЗрдВ рдбрд┐рдмрдЧрд┐рдВрдЧ рдореЗрдореЛрд░реА рдореИрдиреЗрдЬрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкрд░рд┐рдЪрдп рдЬреЛ рд▓рдХреНрд╖рд┐рдд рджрд░реНрд╢рдХреЛрдВ рдХреЛ рдЬреНрдЮрд╛рдд рдЪреАрдЬреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдкрд░рд┐рдЪрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рд╣реЛрдиреЗ рджреЛред
рдбреЗрд▓реНрдлреА рд╡реАрд╕реАрдПрд▓ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЫрд╡рд┐ рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдорд┐рдд рддрдВрддреНрд░ рд╣реИред рдПрдХ TPicture рд╡рд░реНрдЧ рд╣реИ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХреЗ рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рд▓реЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╡рд╛рдВрдЫрд┐рдд рдЧреНрд░рд╛рдлрд┐рдХ рдХреНрд▓рд╛рд╕ рдлрд╝рд╛рдЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЧреНрд░рд╛рдлрд┐рдХ рдХреНрд▓рд╛рд╕ рдХреЛ TPicture.RegisterFileFormat рдХрд╣рдХрд░ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдлрд╝рд╛рдЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдЕрдиреБрд░реВрдк рд╡рд░реНрдЧ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, TPicture.RegisterFileFormat ('PNG', 'рдкреЛрд░реНрдЯреЗрдмрд▓ рдиреЗрдЯрд╡рд░реНрдХ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕', TPNGObject); )
рдЕрдЧрд▓рд╛, TPicture.LoadFromFile рдореЗрдВ рдПрдХ рдЪрд┐рддреНрд░ рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп, рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХреГрдд рд╡рд░реНрдЧ рдХреЛ рдЦреЛрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд╛рдпрд╛ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдЪрд┐рддреНрд░ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИред
рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд▓рд┐рдП рдХрдИ рдХрдХреНрд╖рд╛рдПрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдХрд┐ рдХреМрди рд╕рд╛ рд╡рд░реНрдЧ рдЕрдВрддрд┐рдо рдкрдВрдЬреАрдХреГрдд рд╣реИ, рдпрд╣ рд╣рдореЗрд╢рд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рднрд▓реЗ рд╣реА рд╕рднреА рд╡рд░реНрдЧ рдкрд░рдВрдкрд░рд╛рдЧрдд рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рд╣реИрдВред рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреНрд░рдо рд╣рдореЗрд╢рд╛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдФрд░ рдХреБрдЫ рднреА рдХреЛрдб рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж RegisterFileFormat рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред
TPicture рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдЧреНрд░рд╛рдлрд┐рдХ рдХрдХреНрд╖рд╛рдУрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрдВрддреНрд░ рдЫрд┐рдкреЗ рд╣реБрдП рд╣реИрдВ рдФрд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдирд┐рдпрдорд┐рдд рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рд╡рд░реНрдЧ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХреГрдд рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╡реНрдпреБрддреНрдХреНрд░рдо рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╣рд▓ рдмрд╕ рдЧреНрд░рд╛рдлрд┐рдХрдПрдХреНрд╕реНрдЯреЗрдВрд╢рди рдХрд╣рдХрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдк рдПрдХ рдмреНрдпрд╛рдЬ рдкреНрд░рд╛рд░реВрдк рдХреА рдПрдХ рддрд╕реНрд╡реАрд░ рдХреЛ рдПрдХ TPicture рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ TPicture.Graphic рдореЗрдВ рдХреНрдпрд╛ рд╡рд░реНрдЧ рд╣реИред
Picture.LoadFromFile('c:\bla\bla\image.png'); Picture.Graphic.ClassName; 
рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдпрд╛ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рд░рдЬрд┐рд╕реНрдЯрд░рдлрд┐рд▓реНрдордореИрдиреЗрдЯ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рд╕рднреА рдХрдХреНрд╖рд╛рдПрдВ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдФрд░ рдЧрдВрджреЗ рд╣реИрдХ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдЖрдкрдХреЛ FastMM4 рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдФрд░ рдЕрдзрд┐рдХ рд╕реВрдЪрдирд╛рддреНрдордХрддрд╛ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ (FastMM4Options.inc рдореЗрдВ FullDebugMode рдХреЛ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ)ред рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП FastMM4 рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдореЙрдбреНрдпреВрд▓ рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВред
 function GetStackTraceAsText(AReturnAddresses: PNativeUInt): string; var LErrorMessage: array[0..32767] of AnsiChar; LMsgPtr: PAnsiChar; begin LMsgPtr := LogStackTrace(AReturnAddresses, StackTraceDepth, @LErrorMessage[0]); inc(LMsgPtr); LMsgPtr^ := #0; Result := LErrorMessage; end; 
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдбреЗрдореЛ рдХреЛрдб, рдореБрдЭреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╡рд░рдг рдХреЗ рдмрд┐рдирд╛ рд╕реНрдкрд╖реНрдЯ рдЙрдореНрдореАрдж рд╣реИред рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╕рд╛рд░ GetGraphClasses рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИред
 program LogRegisterFileFormat; {$APPTYPE CONSOLE} uses FastMM4, { FastMM4Options.inc   FullDebugModeCallBacks  FullDebugMode} SysUtils, Classes, Graphics, Jpeg, pngimage; var LastClassName: string; function GetClassCreateLine(AStack: string): string; {        } var P: Integer; L: Integer; R: Integer; begin P := Pos('.Create]', AStack); if P > 0 then begin L := P; while (L > 1) and (AStack[L] > #32) do dec(L); inc(L); R := P; while (R < Length(AStack)) and (AStack[R] > #32) do inc(R); Result := Copy(AStack, L, R - L); end else Result := AStack; end; procedure DoCustomMemFree(APHeaderFreedBlock: PFullDebugBlockHeader; AResult: Integer); {   } var LClass: TClass; begin {    } LClass := DetectClassInstance(@APHeaderFreedBlock.PreviouslyUsedByClass); if LClass <> nil then begin {  TGraphic   LastClassName       } if LClass.InheritsFrom(TGraphic) then begin LastClassName := LClass.ClassName; {     ,      } if APHeaderFreedBlock.AllocationStackTrace[0] <> 0 then LastClassName := LastClassName + ' ' + GetClassCreateLine(GetStackTraceAsText(@APHeaderFreedBlock.AllocationStackTrace)); end; end; end; function Fetch(var Value: string; const Delimiter: string): string; {    Value       .   Synapse,      } var P: Integer; begin P := Pos(Delimiter, Value); if P < 1 then begin Result := Value; Value := ''; end else begin Result := Copy(Value, 1, P - 1); Delete(Value, 1, P + Length(Delimiter)); end; Result := Trim(Result); Value := Trim(Value); end; procedure GetGraphClasses(const AStrings: TStrings); var Filters: string; FileMask: string; FileExt: string; Pic: TPicture; begin {     '*.png;*.jpg'} Filters := GraphicFileMask(TGraphicClass(TObject)); {     } FileMask := Fetch(Filters, ';'); while Length(FileMask) > 0 do begin Pic := TPicture.Create; FileExt := ExtractFileExt(FileMask); try try LastClassName := ''; {    } FastMM4.OnDebugFreeMemFinish := DoCustomMemFree; {               .    LoadFromFile,        .         DoCustomMemFree     } Pic.LoadFromFile(FileExt); {   -    ,  , ,  } if Pic.Graphic <> nil then AStrings.Add(FileMask + ' = ' + Pic.Graphic.ClassName); except {      .   LastClassName   .} AStrings.Add(FileMask + ' = ' + LastClassName); LastClassName := ''; end; finally FreeAndNil(Pic); FastMM4.OnDebugFreeMemFinish := nil; end; {       Filters} FileMask := Fetch(Filters, ';'); end; end; var Log: TStringList; begin Log := TStringList.Create; GetGraphClasses(Log); Log.SaveToFile(ParamStr(0) + '.log'); Log.Free; end. 


Source: https://habr.com/ru/post/In192944/


All Articles