Skip to content

Commit

Permalink
Merge pull request #38 from FrankBijnen/Development
Browse files Browse the repository at this point in the history
Version 6.1.0.0 Updates
  • Loading branch information
FrankBijnen committed Aug 19, 2023
2 parents 8c5f06d + 9048039 commit 3b59643
Show file tree
Hide file tree
Showing 35 changed files with 2,682 additions and 1,682 deletions.
17 changes: 16 additions & 1 deletion Docs/ReadMe for Developers.txt
Expand Up @@ -5,4 +5,19 @@ There are 2 steps to take before compiling.
1) Install the styles. See the styles subdirectory.
2) Install the ShellControls.See the Vcl.ShellControls subdirectory.

Frank Bijnen
Version 6.1.0.

Compiling for Win64.

1) The Project file (.dproj) has been changed to create a 64Bits executable
2) A .GroupProj has been added to facilitate compiling multiple platforms. Use the Build groups pane in the Project Manager.
3) You will need to put the 64Bits version of WebViewloader2.dll in the path.
4) 64 Bits has not yet been extensively tested. It is recommended to install the JEDI Code Library and enable {$DEFINE STACKTRACE} in the .dpr
so you will get a stacktrace in the event of an exception.

Generating Thumbnails is moved to a separate unit. ExiftoolsGUI_Thumbnail.pas
The TShellListView extensions are moved to a separate unit. ExiftoolsGUI_ShellList.pas

The source has been reformatted within Delphi. (Ctrl/D) The default settings are used. Except for the right margin 80->150

Frank Bijnen
8 changes: 8 additions & 0 deletions Docs/ReadMe for Users.txt
Expand Up @@ -36,4 +36,12 @@ worth mentioning 2 things.

2. Use Ctrl + Click on the map to get the coordinates. These are shown in the text box.

Changed with version 6.1.0
Windows 64 Bits support has been added. If you decide to use that version please unpack the win-x64 version of the WebView2Loader.dll.

Thumbnails setting have been moved to a separate tab on the preferences form. Additional options available are:
- Disable automatic generating of the thumbnails.
- Manually generate the thumbnails.
- Cleaning the thumbnail cache.

Frank Bijnen
36 changes: 36 additions & 0 deletions Docs/Readme Using Codecs.txt
@@ -0,0 +1,36 @@
Since ExifToolsGui now relies on WIC (Windows Imaging Component) a few words on the codecs I have tested.

The codecs are used in 2 places. First in the Thumbnails that you can see in the filelist when you set the Details to off. Second in the preview situated Left Bottom.

I have tested 3 codecs with PEF (Pentax) and DNG images.
The DNG images were either created directly by the camera, or converted with Adobe DNG Converter.
Camera's used are Pentax K100D, Pentax K-X and Pentax K5II-s.

I also have JPG's and MP4's created by an Android Samsung phone, the standard Windows Codecs are sufficient for them.

1) Raw Image Extension that you can obtain from the Microsoft store.

Pef: Works in Preview and Thumbnails
Dng: Works in Preview, but very often not for the Thumbnails.

Other Raw formats like Sony Arw, Canon CR2 and Nikon Nef seem to work, but I have a very limited amount of images to test.

2) FastPicture viewer. Download from https://www.fastpictureviewer.com/

Looking at the website you may think it is not free. But if you only need the Raw codec the 'Home Basic' is sufficient and is free for peronal use.
Install the 32/64 Bits version as required by your OS.
In the installer dialog only keep the 'Images Codecs (Raw Support)' set the other to 'Entire feature will be unavailable'. Unless you want try them ofcourse.

All tested raw formats (Pef, Dng noticeably) work for Thumbnails an Preview.
It is worth mentioning that the preview in the raw file is extracted. So very fast, but the camera settings are not applied.

3) Adobe DNG Codec 2.0
Adobe does not provide this Codec anymore, but if you search the net you will find the links.

Works for Thumbnails and Preview, obviously only for DNG files.
Contrary to the FastPicture viewer is can apply the camera settings, which makes it considerable slower.
If you install FastPicture viewer and Abobe DNG Codec both, the latter is preferred by Windows.

If you have more information post it on GIT Hub (https://github.com/FrankBijnen/ExifToolGui/), or the ExifTool forum (https://exiftool.org/forum/index.php?topic=15053.0) .

Frank
6 changes: 6 additions & 0 deletions Docs/changelog.txt
Expand Up @@ -11,3 +11,9 @@ Version: Description Issue
6.0.5.0 Fix Issue #15 Still Access Violations changing directory in thumbnail mode.
Fix Issue #16 Change the location of the Ini file.
Fix Issue #17 Add the possibility to override the ExifTool.exe location in the Preference.
6.1.0.0 Fix Issue #26 Generating Thumbnails fails in Windows 7
Fix Issue #31 Error in default Workspace (Subject).
Fix Issue #33 Prepare for 64 Bits
Fix Issue #36 Add platform Win64
Fix Issue #37 Generating Thumbnail updates
Source code formatted with Delphi Formatter
12 changes: 4 additions & 8 deletions Source/DateTimeEqual.pas
Expand Up @@ -56,14 +56,11 @@ procedure TFDateTimeEqual.Button2Click(Sender: TObject);
begin
ETcmd := '';
if RadioButton1.Checked then
ETcmd := '-exif:DateTimeOriginal>exif:ModifyDate' + CRLF +
'-exif:DateTimeOriginal>exif:CreateDate';
ETcmd := '-exif:DateTimeOriginal>exif:ModifyDate' + CRLF + '-exif:DateTimeOriginal>exif:CreateDate';
if RadioButton2.Checked then
ETcmd := '-exif:CreateDate>exif:ModifyDate' + CRLF +
'-exif:CreateDate>exif:DateTimeOriginal';
ETcmd := '-exif:CreateDate>exif:ModifyDate' + CRLF + '-exif:CreateDate>exif:DateTimeOriginal';
if RadioButton3.Checked then
ETcmd := '-exif:ModifyDate>exif:DateTimeOriginal' + CRLF +
'-exif:ModifyDate>exif:CreateDate';
ETcmd := '-exif:ModifyDate>exif:DateTimeOriginal' + CRLF + '-exif:ModifyDate>exif:CreateDate';

ET_OpenExec(ETcmd, FMain.GetSelectedFiles, ETout, ETerr);
FMain.UpdateLogWin(ETout, ETerr);
Expand All @@ -90,8 +87,7 @@ procedure TFDateTimeEqual.FormShow(Sender: TObject);
Label1.Caption := 'Backup: ON';
Application.OnHint := DisplayHint;

ETcmd := '-s3' + CRLF + '-f' + CRLF + CmdDateOriginal + CRLF + CmdDateCreate
+ CRLF + CmdDateModify;
ETcmd := '-s3' + CRLF + '-f' + CRLF + CmdDateOriginal + CRLF + CmdDateCreate + CRLF + CmdDateModify;
ET_OpenExec(ETcmd, FMain.GetFirstSelectedFile, ETresult);
LabeledEdit1.Text := ETresult[0];
LabeledEdit2.Text := ETresult[1];
Expand Down
9 changes: 4 additions & 5 deletions Source/DateTimeShift.pas
Expand Up @@ -36,7 +36,8 @@ TFDateTimeShift = class(TForm)
procedure DisplayHint(Sender: TObject);
public
{ Public declarations }
var ETouts, ETerrs: string;
var
ETouts, ETerrs: string;
end;

var
Expand Down Expand Up @@ -91,8 +92,7 @@ procedure TFDateTimeShift.Button2Click(Sender: TObject);

procedure TFDateTimeShift.CheckBox1Click(Sender: TObject);
begin
Button2.Enabled := (CheckBox1.Checked) or (CheckBox2.Checked) or
(CheckBox3.Checked);
Button2.Enabled := (CheckBox1.Checked) or (CheckBox2.Checked) or (CheckBox3.Checked);
end;

procedure TFDateTimeShift.CheckBox4Click(Sender: TObject);
Expand Down Expand Up @@ -125,8 +125,7 @@ procedure TFDateTimeShift.FormShow(Sender: TObject);
Label1.Caption := 'Backup: ON';
Application.OnHint := DisplayHint;

ETcmd := '-s3' + CRLF + '-f' + CRLF + CmdDateOriginal + CRLF + CmdDateCreate
+ CRLF + CmdDateModify;
ETcmd := '-s3' + CRLF + '-f' + CRLF + CmdDateOriginal + CRLF + CmdDateCreate + CRLF + CmdDateModify;
ET_OpenExec(ETcmd, FMain.GetFirstSelectedFile, ETResult);
// .SelectedFiles[0]);

Expand Down
6 changes: 2 additions & 4 deletions Source/EditFCol.pas
Expand Up @@ -21,8 +21,7 @@ TFEditFColumn = class(TForm)
Button5: TButton;
StatusBar1: TStatusBar;
procedure FormShow(Sender: TObject);
procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
Expand Down Expand Up @@ -182,8 +181,7 @@ procedure TFEditFColumn.FormShow(Sender: TObject);
Application.OnHint := DisplayHint;
end;

procedure TFEditFColumn.StringGrid1SelectCell(Sender: TObject;
ACol, ARow: Integer; var CanSelect: Boolean);
procedure TFEditFColumn.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
begin
with StringGrid1 do
begin
Expand Down
40 changes: 9 additions & 31 deletions Source/ExifInfo.pas
Expand Up @@ -26,9 +26,6 @@ interface
end;

IFD0rec = packed record
// ImageWidth,ImageHeight: word;
// DocumentName: string[64];
// ImageDescription: string[64];
Make, Model: String[64];
PreviewOffset, PreviewSize: longint;
Orientation: word; // 1=Normal, 3=180, 6=90right, 8=90left, else=Mirror
Expand All @@ -47,14 +44,9 @@ interface
ISO: string[5];
DateTimeOriginal, DateTimeDigitized: string[19];
ExposureBias: string[7];
// MaxAperture: string[5];
Flash: word; // if (ExifIFD.Flash and 1)=1 then 'Flash=Yes'
FocalLength: string[7];
// UserComment: string[63];
// SubSecTime,SubSecTimeOriginal,SubSecTimeDigitized: string[3];
ColorSpace: string[13];
// ExifImageWidth,ExifImageHeight: word;
// ExposureMode,WhiteBalance: string[7];
FLin35mm: string[7];
LensInfo: string[23];
LensMake: string[23];
Expand Down Expand Up @@ -84,16 +76,10 @@ interface
Date: string[19];
PhotoType: AnsiString;
Title, Event: AnsiString;
// Description: AnsiString;
CountryShown, ProvinceShown, CityShown, LocationShown: ShortString;
PersonInImage: ShortString;
Keywords: ShortString; // =Subject
Rating: string[1];
(*
Headline, Category: AnsiString;
Country,State,City,Location: AnsiString;
DateCreated: string[19];
*)
end;

ICCrec = packed record
Expand Down Expand Up @@ -146,7 +132,7 @@ implementation
TIFFoffset, ExifIFDoffset, GPSoffset: longint; // MakernoteOffset: longint;
ICCoffset, InteropOffset, JPGfromRAWoffset: longint;

// ****************************QUICK METADATA ACCESS*************************
// ****************************QUICK METADATA ACCESS*************************
function SwapL(L: longword): longword;
asm
mov eax,L
Expand Down Expand Up @@ -888,8 +874,7 @@ procedure ReadJPEG;
repeat
BlockRead(FotoF, APPmark, 2);
APPmark := Swap(APPmark);
if (APPmark = $FFE0) or (APPmark = $FFE1) or (APPmark = $FFE2) or
(APPmark = $FFED) then
if (APPmark = $FFE0) or (APPmark = $FFE1) or (APPmark = $FFE2) or (APPmark = $FFED) then
begin
BlockRead(FotoF, APPsize, 2);
APPsize := Swap(APPsize);
Expand Down Expand Up @@ -963,8 +948,7 @@ procedure ReadJPEG;
// ---------------------------------------------------
Seek(FotoF, APPmarkNext);
end;
until (APPmark <> $FFE0) and (APPmark <> $FFE1) and (APPmark <> $FFE2) and
(APPmark <> $FFED);
until (APPmark <> $FFE0) and (APPmark <> $FFE1) and (APPmark <> $FFE2) and (APPmark <> $FFED);
end;

// ==============================================================================
Expand Down Expand Up @@ -1110,14 +1094,10 @@ procedure ReadXMP;
Title := GetAltData('<dc:title>');
Event := GetAltData('<Iptc4xmpExt:Event>');
// Description:=GetAltData('<dc:description>');
CountryShown := GetStructTag('<Iptc4xmpExt:LocationShown>',
'<Iptc4xmpExt:CountryName>');
ProvinceShown := GetStructTag('<Iptc4xmpExt:LocationShown>',
'<Iptc4xmpExt:ProvinceState>');
CityShown := GetStructTag('<Iptc4xmpExt:LocationShown>',
'<Iptc4xmpExt:City>');
LocationShown := GetStructTag('<Iptc4xmpExt:LocationShown>',
'<Iptc4xmpExt:Sublocation>');
CountryShown := GetStructTag('<Iptc4xmpExt:LocationShown>', '<Iptc4xmpExt:CountryName>');
ProvinceShown := GetStructTag('<Iptc4xmpExt:LocationShown>', '<Iptc4xmpExt:ProvinceState>');
CityShown := GetStructTag('<Iptc4xmpExt:LocationShown>', '<Iptc4xmpExt:City>');
LocationShown := GetStructTag('<Iptc4xmpExt:LocationShown>', '<Iptc4xmpExt:Sublocation>');
PersonInImage := GetBagData('<Iptc4xmpExt:PersonInImage>');
Keywords := GetBagData('<dc:subject>');
Rating := GetTagData('<xmp:Rating>');
Expand Down Expand Up @@ -1255,8 +1235,7 @@ function GetOrientationValue(fName: string): byte;
repeat
BlockRead(FotoF, AppMarker, 2);
AppMarker := Swap(AppMarker);
if (AppMarker = $FFE0) or (AppMarker = $FFE1) or (AppMarker = $FFED)
then
if (AppMarker = $FFE0) or (AppMarker = $FFE1) or (AppMarker = $FFED) then
begin
BlockRead(FotoF, APPsize, 2);
APPsize := Swap(APPsize);
Expand All @@ -1273,8 +1252,7 @@ function GetOrientationValue(fName: string): byte;
break;
Seek(FotoF, NextAPPmarker);
end;
until (AppMarker <> $FFE0) and (AppMarker <> $FFE1) and
(AppMarker <> $FFED);
until (AppMarker <> $FFE0) and (AppMarker <> $FFE1) and (AppMarker <> $FFED);
end;
end;
end;
Expand Down

0 comments on commit 3b59643

Please sign in to comment.