Bonne nouvelle,
J'ai effectué des centaines de test de la DLL, bon juste avec un 1100D et un 1000D, mais c'est très stable :)
Pour obtenir la DLL, contactez moi.
Version imprimable
Bonne nouvelle,
J'ai effectué des centaines de test de la DLL, bon juste avec un 1100D et un 1000D, mais c'est très stable :)
Pour obtenir la DLL, contactez moi.
Bonjour Xifit,
je viens de tomber sur ce sujet qui m'interresse au plus haut point.
Pourrais-tu me faire parvenir la DLL ?
Merci d'avance.
Gilles
I stiil think the code in CCP_0.0.30_C078D67F.rar is interesting for a lot of Delphi programmers working with the Canon SDK and the Canon EOS cameraes.
It was still straight forward to compile the code in Delphi XE7. However, playing around with LiveView made it end up in dead locks. I did fix this by making a few changes to the code in the unit ThreadLiveViewStream.pas. Please notice the added synchronize command.
unit ThreadLiveViewStream;
interface
uses
Classes, CanonCamera, ExtCtrls;
type
TLiveViewStream = class(TThread)
private
{ Déclarations privées }
FCamera: TCanonCamera;
FImage: TImage;
FStatus : Boolean;
protected
procedure DownloadNextLVI;
procedure Execute; override;
public
property Status : Boolean read FStatus;
constructor Create(Camera: TCanonCamera; Image: TImage; CreateSuspended: Boolean = True);
end;
implementation
{ TLiveViewStream }
constructor TLiveViewStream.Create(Camera: TCanonCamera; Image: TImage; CreateSuspended: Boolean = True);
begin
Self.FCamera := Camera;
Self.FImage := Image;
Self.FStatus := False;
Inherited Create(CreateSuspended);
end;
//har selv oprettet denne for at udføre Synchronize
procedure TLiveViewStream.DownLoadNextLVI;
begin
Self.FStatus := FCamera.DownloadLiveViewImage(FImage); //Lecture et affichage du stream dans l'objet
end;
procedure TLiveViewStream.Execute;
begin
if not FCamera.IsInLiveView Then //demare le LV
Exit;
Self.Priority := tpLower; //tpHigher should be tpLower according to the Delphi Help
repeat
try
//FStatus := FCamera.DownloadLiveViewImage(FImage); //Lecture et affichage du stream dans l'objet
Synchronize(DownloadNextLVI); //Did add Synchronize on 11-10-2015 to prevent dead locks
except
FStatus := False;
end;
until Terminated;
End;
end.
Next problem in PixelKs code from 09/04/2014 17h 14 is the annoying flickering and bad timing while in zooming in liveView.
I did fix this by downloading the fast jpeg decoder unit jpegdec.pas from http://synopse.info/files/jpegdec.zip
I did include jpegdec in the uses clause of the CanonCamera.pas
And I did the following changes to the last part of the unit:Code:unit CanonCamera;
interface
uses
Windows, Messages, Classes, Sysutils, Graphics, Jpeg,
EDSDKApi, EDSDKType, EDSDKError, ExtCtrls,
jpegdec; //FabInSpace did add reference to jpegdec.pas on 11-10-2015
Code:function TCanonCamera.DownloadLiveViewImage(Image : TImage) : Boolean;
var
MemStream: TMemoryStream;
Stream : EdsStreamRef;
evfImage : EdsEvfImageRef;
JPG: TJPEGImage;
ImageData : Pointer;
ImageSize : EdsUInt32;
BMP: TBitMap; //Added 11-10-2015
begin
Result := False;
stream := nil;
evfImage := nil;
try
Self.LastError := EdsCreateMemoryStream( 0, Stream );
if Self.LastError <> EDS_ERR_OK then
Exit;
try
Self.LastError := EdsCreateEvfImageRef( Stream, evfImage );
if Self.LastError <> EDS_ERR_OK then
Exit;
Self.LastError := EdsDownloadEvfImage(Self.FRef , evfImage);
if Self.LastError <> EDS_ERR_OK then
begin
EdsRelease(stream);
Exit;
end;
Self.LastError := EdsGetPointer(Stream, ImageData);
if Self.LastError <> EDS_ERR_OK then
begin
EdsRelease(evfImage);
EdsRelease(stream);
Exit;
end;
Self.LastError := EdsGetLength(Stream, ImageSize);
if Self.LastError <> EDS_ERR_OK then
begin
EdsRelease(evfImage);
EdsRelease(stream);
Exit;
end;
MemStream := TMemoryStream.Create;
try
MemStream.WriteBuffer(ImageData^, ImageSize);
MemStream.position := 0;
{Old lines from before 11-10-2015
JPG := TJPEGImage.Create; // The Stream is a JPEG Image
try
JPG.LoadFromStream(MemStream);
//JPG.SaveToFile('LVSteam.jpg');
if not Assigned(Image.Picture.Bitmap) then
Image.Picture.Bitmap := TBitmap.Create;
Image.Picture.Bitmap.Assign(JPG);
Result := True;
Finally
JPG.Free;
end; }
//New lines elliminating flickering
with TMemoryStream.Create do
try
LoadFromstream(MemStream);
BMP := JpegDecode(memory, Size);
if BMP <> nil
then
try
Image.Picture.Bitmap := Bmp;
finally
BMP.free;
end;
finally
Free;
end;
//end of new lines from 11-10-2015
finally
MemStream.Free;
end;
finally
EdsRelease(evfImage);
end;
finally
EdsRelease(stream);
end;
end;