ImageEn for Delphi and C++ Builder ImageEn for Delphi and C++ Builder

 

ImageEn Forum
Profile    Join    Active Topics    Forum FAQ    Search this forumSearch
 All Forums
 ImageEn Library for Delphi, C++ and .Net
 ImageEn and IEvolution Support Forum
 Vertical images taked with Galaxy cameras

Note: You must be registered in order to post a reply.
To register, click here. Registration is FREE!

View 
UserName:
Password:
Format  Bold Italicized Underline  Align Left Centered Align Right  Horizontal Rule  Insert Hyperlink   Browse for an image to attach to your post Browse for a zip to attach to your post Insert Code  Insert Quote Insert List
   
Message 

 

Emoji
Smile [:)] Big Smile [:D] Cool [8D] Blush [:I]
Tongue [:P] Evil [):] Wink [;)] Black Eye [B)]
Frown [:(] Shocked [:0] Angry [:(!] Sleepy [|)]
Kisses [:X] Approve [^] Disapprove [V] Question [?]

 
Check here to subscribe to this topic.
   

T O P I C    R E V I E W
Dany Posted - Dec 11 2018 : 07:01:32
Hello;

I found that every photo I take using Galaxy's cameras (S5 to S9 tested) are being rotated, if the photos are vertical. All other standar applications are reading those images in the correct orientation.

I testesd using my own project, and a few test projects that come as examples in ImageEn. For example, I added a few lines in the RotateTool project, but it still rotates the image:

procedure TForm1.btnOpenClick(Sender: TObject); var
  sFilename: string;
begin
  sFilename := ImageEnView1.IO.ExecuteOpenDialog();
  if sFilename <> '' then
  begin

    ImageEnView1.IO.Params.TIFF_EnableAdjustOrientation := False;     ///////// I added this
    ImageEnView1.IO.Params.TIFF_Orientation := _exoCorrectOrientation;  ///////// I added this

    ImageEnView1.Proc.ClearUndo();
    ImageEnView1.MouseInteract := []; // Reset the rotation tool
    ImageEnView1.IO.LoadFromFile( sFilename );
    ControlChange(nil);
    ImageEnView1.MouseInteract := [ miRotateTool ];
    lblInfo.Enabled := True;

    // Focus the TImageEnView, so keyboard events are handled
    ImageEnView1.SetFocus();
  end;
end;




Any idea about how to fix this problem?. I attached an example image.

Thank you!

attach/Dany/2018121173410_20181128_221917.jpg
15   L A T E S T    R E P L I E S    (Newest First)
xequte Posted - Dec 12 2018 : 19:31:12
Thanks Bill

Nigel
Xequte Software
www.imageen.com
Dany Posted - Dec 12 2018 : 13:24:17
Yeahhh Bill, thank you! this line did the trick:

IEGlobalSettings().IOParamDefaults.EnableAdjustOrientation := True

Many thanks !!!
w2m Posted - Dec 12 2018 : 12:51:24
You are still reading the stream before setting EnableAdjustOrientation to true. Somehow you have to set EnableAdjustOrientation to true before reading the stream, otherwise the procedure has no way to know if the orientation should be adjusted. I am not an expert with this particular function because I have never used it. Anyway, Nigel can probably get you on track.

I did spot this which may or may not help: (it is supposed to work with TIEMultiBitmap)

TIEImageEnGlobalSettings.IOParamDefaults

Declaration

property IOParamDefaults: TIOParamDefaults;

Description

Sets some default properties when intializing TIOParams objects.

Some properties of TIOParams objects affect the way images are loaded. It can be useful to set these globals, which will affect the loading of all images in TImageEnView, TImageEnMView, TImageEnFolderMView, TIEBitmap and TIEMultiBitmap.

EnableAdjustOrientation EnableAdjustOrientation, JPEG_EnableAdjustOrientation and TIFF_EnableAdjustOrientation False
RAW_AutoAdjustColors RAW_AutoAdjustColors False
RAW_HalfSize RAW_HalfSize False
RAW_GetEmbeddedJpeg RAW_GetEmbeddedJpeg False
RAW_Interpolation RAW_Interpolation ieRAWInterpolationLinear
RAW_QuickInterpolate RAW_QuickInterpolate True
RAW_UseAutoWB RAW_UseAutoWB False
RAW_UseCameraWB RAW_UseCameraWB False
JPEG_DCTMethod JPEG_DCTMethod ioJPEG_ISLOW
JPEG_Quality * JPEG_Quality, TIFF_JPEGQuality, DICOM_JPEGQuality 80
JPEG_Scale JPEG_Scale ioJPEG_FULLSIZE
PSD_LoadLayers PSD_LoadLayers False

Note: JPEG_Quality only affects saving, not loading, but is included because of its frequent usage

Example

// For all loading, automatically rotate images to their correct orientation
IEGlobalSettings().IOParamDefaults.EnableAdjustOrientation := True

// Improve the colors of Raw camera images added to a TIEMultiBitmap
IEGlobalSettings().IOParamDefaults.RAW_AutoAdjustColors := True;
IEGlobalSettings().IOParamDefaults.RAW_UseAutoWB := True;
IEGlobalSettings().IOParamDefaults.RAW_UseCameraWB := True;
MyMultiBitmap.FillFromDirectory( 'E:\DCIM\' );

// Faster loading for all Camera Raw images
IEGlobalSettings().IOParamDefaults.RAW_HalfSize := True;
IEGlobalSettings().IOParamDefaults.RAW_GetEmbeddedJpeg := True;




Bill Miller
Adirondack Software & Graphics
Email: w2m@hughes.net
EBook: http://www.imageen.com/ebook/
Custom Commercial ImageEn Development
Dany Posted - Dec 12 2018 : 12:42:04
OK, I did:

// Levanto los parámetros desde el stream
IOP := TIOMultiParams.Create;
IOP.Read(AStream);
iTot := IOP.Count;
for i := 0 to iTot-1 do IOP.Params[i].EnableAdjustOrientation := True;
// Formato aceptado ....
MB := TIEMultiBitmap.Create;
try
AStream.Position := 0;
MB.Read(AStream, ioUnknown, IOP);


But didn't work, images are still with wrong orientation.
w2m Posted - Dec 12 2018 : 10:52:17
Sorry, Try TIOMultiParams. Look at the help file:
function Read(Stream: TStream; FileType: TIOFileType = ioUnknown; IOParams: TIOMultiParams = nil): boolean; overload;

Bill Miller
Adirondack Software & Graphics
Email: w2m@hughes.net
EBook: http://www.imageen.com/ebook/
Custom Commercial ImageEn Development
Dany Posted - Dec 12 2018 : 10:48:22
The Read method does not accept a TIOParams as a parameter.
w2m Posted - Dec 12 2018 : 10:31:08
Try setting the MParams.EnableAdjustOrientation when Reading:

var
MB: TIEMultiBitmap;
sFileExts, s: string;
iPos, iTot, i: integer;
AStream: TMemoryStream;
MParams: TIOMultiParams;
begin
MB.ParamsEnabled := True;
MParams.EnableAdjustOrientation := True;
MB.Read(AStream, MParams);
iTot := MB.Count;
for i := 0 to iTot - 1 do
begin
case MB.Params[i].EXIF_Orientation of
_exoNeeds180Rotate:
MB.Rotate(i, 180);
_exoNeeds90RotateCW:
MB.Rotate(i, 90);
_exoNeeds270RotateCW:
MB.Rotate(i, 270);
end;
end;

Bill Miller
Adirondack Software & Graphics
Email: w2m@hughes.net
EBook: http://www.imageen.com/ebook/
Custom Commercial ImageEn Development
Dany Posted - Dec 12 2018 : 10:04:44
Before reading the stream there are no items in MB.
w2m Posted - Dec 12 2018 : 10:01:53
Try setting MB.Params[i].EnableAdjustOrientation to True before reading the stream.


Bill Miller
Adirondack Software & Graphics
Email: w2m@hughes.net
EBook: http://www.imageen.com/ebook/
Custom Commercial ImageEn Development
Dany Posted - Dec 12 2018 : 09:53:51
Thank you; I tried to modify my code in this way:

MB.ParamsEnabled := True;
MB.Read(AStream);
iTot := MB.Count;
for i := 0 to iTot-1 do
begin
case MB.Params[i].EXIF_Orientation of
_exoNeeds180Rotate: MB.Rotate(i, 180);
_exoNeeds90RotateCW: MB.Rotate(i, 90);
_exoNeeds270RotateCW: MB.Rotate(i, 270);
end;

But I see EXIF_Orientation is always 0, for all the images. Do I missed something else?
xequte Posted - Dec 12 2018 : 09:04:24
Hi

Unfortunately I am out of the office until after Christmas, so I cannot test this directly.

The EXIF orientation of this image is _exoNeeds90RotateCW (6).

https://www.imageen.com/help/TIOParams.EXIF_Orientation.html

So if EnableAdjustOrientation is true, then ImageEn will rotate it 90 degrees when displayed in a TImageEnView or TImageEnMView.

(Also, EnableAdjustOrientation must be enabled BEFORE loading).


EnableAdjustOrientation does not actually modify the file, please see:

https://www.imageen.com/help/TIOParams.EnableAdjustOrientation.html

You would be better to read the EXIF_Orientation yourself and rotate the image appropriately. Generally only _exoNeeds180Rotate, exoNeeds90RotateCW and _exoNeeds270RotateCW are needed.

Nigel
Xequte Software
www.imageen.com
Dany Posted - Dec 12 2018 : 06:53:24
Than you Roy;

My extact case is that I am receiving each file as a stream, directly form the celphone, using tethering. So I do:

procedure TImgCollection.RecibeDeMovil(const AStream: TMemoryStream; const sFileName: string);
var
  MB: TIEMultiBitmap;
  sFileExts, s: string;
  iPos, iTot, i: integer;
begin
  MB := TIEMultiBitmap.Create;
  try
    MB.ParamsEnabled := True;
    MB.Read(AStream);
    iTot := MB.Count;
    for i := 0 to iTot-1 do
    begin
      MB.Params[i].EnableAdjustOrientation := True;
      MB.Resample(i, FTamaMax, FTamaMax, rfFastLinear, True, True);
    end;
    MB.Write('myfile.tiff');
  finally
    MB.Free;
  end;
end;


I do this way because I can receive a tiff in the stream, but I have to resample each image before saving. Maybe the problem is MB does not have a chance to auto-orient because the image is loaded before, but I don't see a command for auto-rotating after load.

But I cannot get the image in the correct orientation.
rmklever Posted - Dec 11 2018 : 15:56:34
Hi Dany,

I am a little confused, what exactly is it you want to happen.

If you want the photo to be auto rotated you set:

imgView.IO.Params.EnableAdjustOrientation:= True;

and if no rotation is wanted:

imgView.IO.Params.EnableAdjustOrientation:= False;


At least that is what happens when I try it in my app.

Roy M Klever
Klever on Delphi - www.rmklever.com
Dany Posted - Dec 11 2018 : 13:43:09
Hello Roy, I tried everithing. Also, we have to considere that this images are readed wiht other editor by default in correct orientation.
rmklever Posted - Dec 11 2018 : 10:05:14
Hi Dany,

Try using

ImageEnView1.Params.EnableAdjustOrientation:= True;

You are setting autoRotation for tiff files only... I belive.

Hope this helps.


Roy M Klever
Klever on Delphi - www.rmklever.com