fotoğraf makinasından resim çekmek
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- mustafasoy
- Üye
- Mesajlar: 154
- Kayıt: 02 Ağu 2013 05:00
- Konum: istanbul
- İletişim:
fotoğraf makinasından resim çekmek
formda araştırdım ancak net bir sonuca ulaşamadım
şöyle bir yapıya ihtiyacım var
1.fotoğraf makinası pc ye bağlanır
2.fotoğraf makinasından resim çekilir (yada bağlantı kurulursa fotoğraf makinasını webcam gibi kullanarak buttona ile resim çekilir)
3.son çekilen resim image nesnesine aktarılır
webcam üzerinden erişilebiliyor ancak resim kalitesi vasat olduğundan daha profesyonel makinalar üzerinden resim çekmek ve ilgili stok kartına aktarmak amaçlanmaktadır.
--------------------
yada fotoğraf makinası pc ye bağlanır ve makine üzerinden resim çekilir aynı anda fotoğraf makinasının hafıza kartı bilgisayarda görünürse hafıza kartına son eklenen resimde elde edilebilir ancak aynı anda hem fotoğraf çekip hem de disk görünür mü yada erişilebilir mi emin değilim
böyle bir çalışma yapan yada fikir verebilecek arkadaşlarımdan bilgi rica ediyorum
şöyle bir yapıya ihtiyacım var
1.fotoğraf makinası pc ye bağlanır
2.fotoğraf makinasından resim çekilir (yada bağlantı kurulursa fotoğraf makinasını webcam gibi kullanarak buttona ile resim çekilir)
3.son çekilen resim image nesnesine aktarılır
webcam üzerinden erişilebiliyor ancak resim kalitesi vasat olduğundan daha profesyonel makinalar üzerinden resim çekmek ve ilgili stok kartına aktarmak amaçlanmaktadır.
--------------------
yada fotoğraf makinası pc ye bağlanır ve makine üzerinden resim çekilir aynı anda fotoğraf makinasının hafıza kartı bilgisayarda görünürse hafıza kartına son eklenen resimde elde edilebilir ancak aynı anda hem fotoğraf çekip hem de disk görünür mü yada erişilebilir mi emin değilim
böyle bir çalışma yapan yada fikir verebilecek arkadaşlarımdan bilgi rica ediyorum
Nasıl ki Soru sorarak öğrendiyseniz , öğrendiklerinizi cevap vererek öğretiniz.
Re: fotoğraf makinasından resim çekmek
Fotoğraf makinanızı bilgisayara USB üzerinden bağladığınızda çok büyük ihtimalle; cihazın belleğine bir depolama aygıtı olarak ulaşabiliyor durumda olursunuz. Çekilen fotoğrafların nereye kayıt edildiğini bulursunuz öncelikle. Ardından o klasörü yeni eklenen dosya/dosyalar için dinlemeye başlarsınız. Bunun için size; FindFirstChangeNotification ve RegisterWaitForSingleObject API'lerini önerebilirim. Bu sayede; resim çekilip fotoğraf makinasında sizin dinlediğiniz klasöre kayıt edildiği anda; sizin haberiniz olur ve gereğini yapabilirsiniz.
- mustafasoy
- Üye
- Mesajlar: 154
- Kayıt: 02 Ağu 2013 05:00
- Konum: istanbul
- İletişim:
Re: fotoğraf makinasından resim çekmek
cevap için teşekkürler tuğrul bey , şimdi varolan fotoğraf makinamla(sony steadyshot dsc-w530) denedim ancak fotoğraf makinası bilgisayara bağlandığında usb moduna geçerek fotoğraf çekilmesini engelliyor bu yöntem işe yaramayacak gibi geliyor
Nasıl ki Soru sorarak öğrendiyseniz , öğrendiklerinizi cevap vererek öğretiniz.
Re: fotoğraf makinasından resim çekmek
O zaman iş epey bir karışık hale gelebilir. Bu durumda cihaza bir kamera gibi erişmeye çalışmak yada SDK'ları ile boğuşmak yerine; kullanıcının ilgili stok için bir resim seçmesini sağlayacak bir open dialog ile durumu idare etmeniz hem sizin hem de projeniz için daha faydalı olur sanırım.
Re: fotoğraf makinasından resim çekmek
Twain veya video capture component ları ile cihazdan görüntü alabilirsiniz, ama bu cihazın izin verdiği kadar olacaktır. FullHD çekim yapabilen cihaz 640x480 görüntüye izin verebilir mesela.
Tuğrul beyin tavsiyesi en mantıklısı, siz stok kartına drag & drop özelliği ekleyin, kullanıcı istediği cihazdan fotoğraf, gerekirse video yu stok kartının üzerine sürükleyip bıraksın. Bu sayede hem bir sürü kontrolden, hemde cihaz değişikliği karmaşasından kurtulmuş olursunuz.
Kolay gele
Tuğrul beyin tavsiyesi en mantıklısı, siz stok kartına drag & drop özelliği ekleyin, kullanıcı istediği cihazdan fotoğraf, gerekirse video yu stok kartının üzerine sürükleyip bıraksın. Bu sayede hem bir sürü kontrolden, hemde cihaz değişikliği karmaşasından kurtulmuş olursunuz.
Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
- mustafasoy
- Üye
- Mesajlar: 154
- Kayıt: 02 Ağu 2013 05:00
- Konum: istanbul
- İletişim:
Re: fotoğraf makinasından resim çekmek
teşekkürler freeman35 şu andaki yapı dediğiniz gibi işliyor ancak ben sadece biraz daha kullanıcının işini hızlandırabilir miyim diye düşünüyordum
yoksa oldukça hantal bir şekilde çalışıyorlar ya resimlerin isimlerini yanlış tanımlıyorlar yada stoğa yanlış resim bağlıyorlar
fotoğraf makinasını bir tripod üzerine yerleştirip katalog çekimi yapılacak ürünü değiştirip ilgili stoğu tanımlayıp resim al buttonu ile fotoğraf makisına sinyal göndererek resimin çekilerek aktif stoğa işlenmesini düşünüyordum
dediğiniz gibi hadi bunu bir makine için yaptık , herkeste farklı farklı cihazlar olacak , bu durumda daha fazla sorunu beraberinde getirecek, kolay gelsin
yoksa oldukça hantal bir şekilde çalışıyorlar ya resimlerin isimlerini yanlış tanımlıyorlar yada stoğa yanlış resim bağlıyorlar
fotoğraf makinasını bir tripod üzerine yerleştirip katalog çekimi yapılacak ürünü değiştirip ilgili stoğu tanımlayıp resim al buttonu ile fotoğraf makisına sinyal göndererek resimin çekilerek aktif stoğa işlenmesini düşünüyordum
dediğiniz gibi hadi bunu bir makine için yaptık , herkeste farklı farklı cihazlar olacak , bu durumda daha fazla sorunu beraberinde getirecek, kolay gelsin
Nasıl ki Soru sorarak öğrendiyseniz , öğrendiklerinizi cevap vererek öğretiniz.
Re: fotoğraf makinasından resim çekmek
Dijital Kameradan Fotograf Çekmek
Usb ile bilgisayara bağlanmış dijital kameradan Windows api(windows image acquisition) ile fotograf çekebiliriz. WIALib_TLB yüklemek için:
Komponent menü den -> import komponent seçeneğinden -> windows image acquisition seçmelisin.
* CheckBox’ı bir ya da birden çok resim çekmek için kullanacaksınız.
* Resimleri LoadFromFile ile image ye yükleyebilirsin.
Usb ile bilgisayara bağlanmış dijital kameradan Windows api(windows image acquisition) ile fotograf çekebiliriz. WIALib_TLB yüklemek için:
Komponent menü den -> import komponent seçeneğinden -> windows image acquisition seçmelisin.
* CheckBox’ı bir ya da birden çok resim çekmek için kullanacaksınız.
* Resimleri LoadFromFile ile image ye yükleyebilirsin.
Kod: Tümünü seç
uses WIALib_TLB;
procedure TForm1.Button1Click(Sender: TObject);
var
wia:IWia;
wiad:OleVariant;
wiax:IWiaDispatchItem;
i:integer;
tc1,tc2:cardinal;
begin
tc1:=GetTickCount;
wia:=CoWia.Create;
if ComboBox1.ItemIndex=-1 then
begin
for i:=0 to wia.Devices.Count-1 do
ComboBox1.Items.Add((wia.Devices.Item[i] as IWiaDeviceInfo).Name);
end
else
begin
wiad:=wia.Devices.Item[ComboBox1.ItemIndex] as IWiaDeviceInfo;
wiax:=wia.Create(wiad).TakePicture;
wiax.Transfer('C:\Data\R&D\Delphi\WIA\test.bmp',false);
tc2:=GetTickCount;
Image1.Picture.LoadFromFile('C:\Data\R&D\Delphi\WIA\test.bmp');
Caption:=IntToStr(tc2-tc1)+'ms '+IntToStr(Image1.Picture.Width)+'x'+IntToStr(Image1.Picture.Height);
end;
end;
Re: fotoğraf makinasından resim çekmek
WIALib_TLB.pas ile yapılmış daha gelişmiş bir örnek açıklamalar almanca ama çözebilirsiniz.
Kod: Tümünü seç
unit dlgWIA;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,WIALib_TLB, ExtCtrls, ComCtrls;
type
TfrmWIA = class(TForm)
PageControl1: TPageControl;
tsLog: TTabSheet;
tsImage: TTabSheet;
memLog: TMemo;
imgImage: TImage;
btnGo: TButton;
StatusBar1: TStatusBar;
procedure btnGoClick(Sender: TObject);
private
procedure Log(S: string); overload;
procedure LogNewLine;
procedure Log(S: string; Params: array of const); overload;
procedure LogSeparator;
procedure OutputItem(Item: IWiaDispatchItem; Name: string);
procedure OutputDevice(Device: IWiaDeviceInfo; Name: string);
function GetTempFileName: string;
function GetDesktopFileName: string;
function ExecuteFile(FileName: string): Boolean;
public
end;
var
frmWIA: TfrmWIA;
implementation
uses JPEG, shlobj, ActiveX, ShellAPI;
{$R *.dfm}
// ------------------------------------------------
// WIA-Aktion
// ------------------------------------------------
procedure TfrmWIA.btnGoClick(Sender: TObject);
var
I: Integer;
Wia: IWia;
Device: IWiaDeviceInfo;
DeviceItem: IWiaDispatchItem;
ImageItem: IWiaDispatchItem;
Coll: ICollection;
FileName: string;
JPEG: TJPEGImage;
begin
imgImage.Picture:= nil;
LogSeparator;
// Einstiegspunkt in WIA
Wia:= CoWia.Create;
// Anzahl Geräte
Log('Anzahl Geräte: %d', [Wia.Devices.Count]);
LogNewLine;
// Infos über alle Geräte ausgeben
for I:= 0 to Wia.Devices.Count-1 do
begin
Device:= WIA.Devices.Item[I] as IWiaDeviceInfo;
OutputDevice(Device, 'Nr. ' + IntToStr(I+1));
end;
// Mit einem Gerät kommunizieren
if Wia.Devices.Count > 0 then
begin
Log('Verbinden mit Gerät...');
// Mit erstem Gerät verbinden
Device:= WIA.Devices.Item[0] as IWiaDeviceInfo;
DeviceItem:= Device.Create;
// Alternativ Benutzer ein Gerät interaktiv wählen lassen
// DeviceItem:= WIA.Create(EmptyParam);
// Infos über Gerät und darauf befindliche Bilder anzeigen
OutputItem(DeviceItem, 'Gewähltes Gerät');
for I:= 0 to DeviceItem.Children.Count - 1 do
begin
ImageItem:= DeviceItem.Children.Item[I] as IWiaDispatchItem;
OutputItem(ImageItem, 'Bild Nr. ' + IntToStr(I+1));
end;
// Ein Bild per UI besorgen
// Alternativ mit TakePicture
LogSeparator;
Log('Bild von Gerät besorgen...');
Coll:= DeviceItem.GetItemsFromUI(SingleImage, MaximizeQuality);
if Coll.Count > 0 then
begin
ImageItem:= Coll.Item[0] as IWiaDispatchItem;
OutputItem(ImageItem, 'Ausgewähltes Bild');
// Bild in temporärer Datei auf Festplatte speichern
FileName:= GetTempFileName;
ImageItem.Transfer(FileName, False);
// Bild anzeigen
imgImage.Picture.Bitmap.LoadFromFile(FileName);
// Temporäre Datei löschen
DeleteFile(FileName);
// Bild als JPEG auf Desktop speichern
FileName:= GetDesktopFileName;
Jpeg:= TJPEGImage.Create;
try
JPEG.Assign(imgImage.Picture.Graphic);
JPEG.SaveToFile(FileName);
finally
FreeAndNil(JPEG);
end;
// JPEG öffnen
ExecuteFile(FileName);
end;
end;
end;
// ------------------------------------------------
// WIA-Objekte in Memo ausgeben
// ------------------------------------------------
procedure TfrmWIA.OutputDevice(Device: IWiaDeviceInfo; Name: string);
begin
Log('Gerät %s hat folgende Eigenschaften:', [Name]);
Log('Name: %s', [Device.Name]);
Log('ID: %s', [Device.Id]);
Log('Typ: %s', [Device.type_]);
Log('Port: %s', [Device.Port]);
Log('Hersteller: %s', [Device.Manufacturer]);
Log('UIClsid: %s', [Device.UIClsid]);
LogNewLine;
end;
procedure TfrmWIA.OutputItem(Item: IWiaDispatchItem; Name: string);
begin
Log('Item %s hat folgende Eigenschaften:', [Name]);
Log('Name: %s', [Item.Name]);
Log('Fullname: %s', [Item.FullName]);
Log('Typ: %s', [Item.ItemType]);
Log('Breite: %d', [Item.Width]);
Log('Höhe: %d', [Item.Height]);
Log('Bildbreite: %d', [Item.PictureWidth]);
Log('Bildhöhe: %d', [Item.PictureHeight]);
Log('Verbindungsstatus: %s', [Item.ConnectStatus]);
Log('Anzahl Kinder: %d', [Item.Children.Count]);
Log('Zeit: %s', [Item.Time]);
Log('Firmware: %s', [Item.FirmwareVersion]);
LogNewLine;
end;
// ------------------------------------------------
// Text in Memo ausgeben
// ------------------------------------------------
procedure TfrmWIA.Log(S: string);
begin
memLog.Lines.Add(S);
end;
procedure TfrmWIA.Log(S: string; Params: array of const);
begin
Log(Format(S, Params));
end;
procedure TfrmWIA.LogNewLine;
begin
Log('');
end;
procedure TfrmWIA.LogSeparator;
begin
LogNewLine;
Log('----------------------------------------------------------');
LogNewLine;
end;
// ------------------------------------------------
// Dateinamen ermitteln
// ------------------------------------------------
function WinGetTempFileName(prefix: string): string;
var
TempDir: String;
Buffer: String;
Size: Integer;
begin
SetLength(prefix, 3);
Size := Windows.GetTempPath(0, nil);
SetLength(TempDir, Size);
Windows.GetTempPath(Size, PChar(TempDir));
SetLength( Buffer, MAX_PATH-14 );
Windows.GetTempFileName(PChar(TempDir), PChar(Prefix), 0, PChar(Buffer));
Result:= StrPas(PAnsiChar(Buffer));
end;
function GetShellDirectory(ID: Integer): string;
var
S: string;
ItemIDList: PItemIDList;
SystemHeap: IMalloc;
begin
Result := EmptyStr;
if SHGetSpecialFolderLocation(Forms.Application.Handle, ID, ItemIDList) = NOERROR then
begin
try
SetLength(S, MAX_PATH);
if SHGetPathFromIDList(ItemIDList, PChar(S)) then
begin
Result:= Copy(S, 1, Pos(#0, S) - 1);
end;
finally
// Von der Shell reservierten Speicher freigeben
if SHGetMalloc(SystemHeap) = NOERROR then
begin
SystemHeap.Free(ItemIDList);
end;
end;
end;
end;
function TfrmWIA.GetTempFileName: string;
begin
Result:= WinGetTempFileName('WIA');
end;
function TfrmWIA.GetDesktopFileName: string;
begin
Result:= GetShellDirectory(CSIDL_DESKTOP);
Result:= IncludeTrailingPathDelimiter(Result);
Result:= Result + 'WIA_Demo.jpeg';
end;
// ------------------------------------------------
// Datei ausführen
// ------------------------------------------------
function TfrmWIA.ExecuteFile(FileName: string): Boolean;
var
Res: Integer;
begin
Res:= ShellExecute(Forms.Application.Handle, nil, PChar(FileName), nil, nil, SW_SHOWNORMAL);
Result:= Res > 32;
end;
end.
________________________________________
Datei: dlgWIA.dfm
________________________________________
object frmWIA: TfrmWIA
Width = 870
Height = 640
Caption = 'WIA'
Position = poScreenCenter
object PageControl1: TPageControl
ActivePage = tsLog
Align = alClient
TabOrder = 0
object tsLog: TTabSheet
Caption = 'Log'
object memLog: TMemo
Align = alClient
ScrollBars = ssVertical
TabOrder = 0
end
end
object tsImage: TTabSheet
Caption = 'Bild'
ImageIndex = 1
object imgImage: TImage
Align = alClient
Center = True
Proportional = True
Stretch = True
end
end
end
object btnGo: TButton
Left = 728
Top = 4
Width = 123
Height = 49
Anchors = [akTop, akRight]
Caption = 'Go!'
TabOrder = 1
OnClick = btnGoClick
end
object StatusBar1: TStatusBar
end
end
________________________________________
Re: fotoğraf makinasından resim çekmek
Bu da Türkcesi
Kod: Tümünü seç
unit dlgWIA;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,WIALib_TLB, ExtCtrls, ComCtrls;
type
TfrmWIA = class(TForm)
PageControl1: TPageControl;
tsLog: TTabSheet;
tsImage: TTabSheet;
memLog: TMemo;
imgImage: TImage;
btnGo: TButton;
StatusBar1: TStatusBar;
procedure btnGoClick(Sender: TObject);
private
procedure Log(S: string); overload;
procedure LogNewLine;
procedure Log(S: string; Params: array of const); overload;
procedure LogSeparator;
procedure OutputItem(Item: IWiaDispatchItem; Name: string);
procedure OutputDevice(Device: IWiaDeviceInfo; Name: string);
function GetTempFileName: string;
function GetDesktopFileName: string;
function ExecuteFile(FileName: string): Boolean;
public
end;
var
frmWIA: TfrmWIA;
implementation
uses JPEG, shlobj, ActiveX, ShellAPI;
{$R *.dfm}
// ------------------------------------------------
// WIA-Aktion
// ------------------------------------------------
procedure TfrmWIA.btnGoClick(Sender: TObject);
var
I: Integer;
Wia: IWia;
Device: IWiaDeviceInfo;
DeviceItem: IWiaDispatchItem;
ImageItem: IWiaDispatchItem;
Coll: ICollection;
FileName: string;
JPEG: TJPEGImage;
begin
imgImage.Picture:= nil;
LogSeparator;
// Einstiegspunkt in WIA
Wia:= CoWia.Create;
// Cihaz sayisi
Log('Cihaz sayisi: %d', [Wia.Devices.Count]);
LogNewLine;
// Tüm cihazlarin bilgilerini göster
for I:= 0 to Wia.Devices.Count-1 do
begin
Device:= WIA.Devices.Item[I] as IWiaDeviceInfo;
OutputDevice(Device, 'Nr. ' + IntToStr(I+1));
end;
// Cihaz ile haberles
if Wia.Devices.Count > 0 then
begin
Log('Cihaz ile baglanti kur...');
// Ilk cihaz ile baglanti kur
Device:= WIA.Devices.Item[0] as IWiaDeviceInfo;
DeviceItem:= Device.Create;
// Alternatif olarak kullaniciya cihaz secimi yaptir
// DeviceItem:= WIA.Create(EmptyParam);
// Cihaz ve üzerindeki resimlerin bilgileri
OutputItem(DeviceItem, 'Secilmis Cihaz');
for I:= 0 to DeviceItem.Children.Count - 1 do
begin
ImageItem:= DeviceItem.Children.Item[I] as IWiaDispatchItem;
OutputItem(ImageItem, 'Bild Nr. ' + IntToStr(I+1));
end;
// UI ile resim elde et
// Alternatif olarak TakePicture ile
LogSeparator;
Log('Cihazdan resim cek...');
Coll:= DeviceItem.GetItemsFromUI(SingleImage, MaximizeQuality);
if Coll.Count > 0 then
begin
ImageItem:= Coll.Item[0] as IWiaDispatchItem;
OutputItem(ImageItem, 'Ausgewähltes Bild');
// Resmi gecici olarak Harddisk üzerine kayit et
FileName:= GetTempFileName;
ImageItem.Transfer(FileName, False);
// Resmi göster
imgImage.Picture.Bitmap.LoadFromFile(FileName);
// Gecici resim dosyasini sil
DeleteFile(FileName);
// Resmi JPEG olarak desktop üzerine kayit et
FileName:= GetDesktopFileName;
Jpeg:= TJPEGImage.Create;
try
JPEG.Assign(imgImage.Picture.Graphic);
JPEG.SaveToFile(FileName);
finally
FreeAndNil(JPEG);
end;
// JPEG'yi ac
ExecuteFile(FileName);
end;
end;
end;
// ------------------------------------------------
// WIA-Objelerini Memo'da göster
// ------------------------------------------------
procedure TfrmWIA.OutputDevice(Device: IWiaDeviceInfo; Name: string);
begin
Log('Cihaz: %s'in özellikleri sunlardir:', [Name]);
Log('Name: %s', [Device.Name]);
Log('ID: %s', [Device.Id]);
Log('Typ: %s', [Device.type_]);
Log('Port: %s', [Device.Port]);
Log('Üretici: %s', [Device.Manufacturer]);
Log('UIClsid: %s', [Device.UIClsid]);
LogNewLine;
end;
procedure TfrmWIA.OutputItem(Item: IWiaDispatchItem; Name: string);
begin
Log('Item %s'in özellikleri sunlardir:', [Name]);
Log('Name: %s', [Item.Name]);
Log('Fullname: %s', [Item.FullName]);
Log('Typ: %s', [Item.ItemType]);
Log('Genislik: %d', [Item.Width]);
Log('Yükseklik: %d', [Item.Height]);
Log('Resim genisligi: %d', [Item.PictureWidth]);
Log('Resim yüksekligi: %d', [Item.PictureHeight]);
Log('Baglanti durumu: %s', [Item.ConnectStatus]);
Log('Alt üye sayisi: %d', [Item.Children.Count]);
Log('Zaman: %s', [Item.Time]);
Log('Firmware: %s', [Item.FirmwareVersion]);
LogNewLine;
end;
// ------------------------------------------------
// Text'i Memo'da göster
// ------------------------------------------------
procedure TfrmWIA.Log(S: string);
begin
memLog.Lines.Add(S);
end;
procedure TfrmWIA.Log(S: string; Params: array of const);
begin
Log(Format(S, Params));
end;
procedure TfrmWIA.LogNewLine;
begin
Log('');
end;
procedure TfrmWIA.LogSeparator;
begin
LogNewLine;
Log('----------------------------------------------------------');
LogNewLine;
end;
// ------------------------------------------------
// Dosya isimlerini elde et
// ------------------------------------------------
function WinGetTempFileName(prefix: string): string;
var
TempDir: String;
Buffer: String;
Size: Integer;
begin
SetLength(prefix, 3);
Size := Windows.GetTempPath(0, nil);
SetLength(TempDir, Size);
Windows.GetTempPath(Size, PChar(TempDir));
SetLength( Buffer, MAX_PATH-14 );
Windows.GetTempFileName(PChar(TempDir), PChar(Prefix), 0, PChar(Buffer));
Result:= StrPas(PAnsiChar(Buffer));
end;
function GetShellDirectory(ID: Integer): string;
var
S: string;
ItemIDList: PItemIDList;
SystemHeap: IMalloc;
begin
Result := EmptyStr;
if SHGetSpecialFolderLocation(Forms.Application.Handle, ID, ItemIDList) = NOERROR then
begin
try
SetLength(S, MAX_PATH);
if SHGetPathFromIDList(ItemIDList, PChar(S)) then
begin
Result:= Copy(S, 1, Pos(#0, S) - 1);
end;
finally
// Shell üzerinden ayirilmis olan bellegi bosalt
if SHGetMalloc(SystemHeap) = NOERROR then
begin
SystemHeap.Free(ItemIDList);
end;
end;
end;
end;
function TfrmWIA.GetTempFileName: string;
begin
Result:= WinGetTempFileName('WIA');
end;
function TfrmWIA.GetDesktopFileName: string;
begin
Result:= GetShellDirectory(CSIDL_DESKTOP);
Result:= IncludeTrailingPathDelimiter(Result);
Result:= Result + 'WIA_Demo.jpeg';
end;
// ------------------------------------------------
// Dosyayi calistir
// ------------------------------------------------
function TfrmWIA.ExecuteFile(FileName: string): Boolean;
var
Res: Integer;
begin
Res:= ShellExecute(Forms.Application.Handle, nil, PChar(FileName), nil, nil, SW_SHOWNORMAL);
Result:= Res > 32;
end;
end.
________________________________________
Datei: dlgWIA.dfm
________________________________________
object frmWIA: TfrmWIA
Width = 870
Height = 640
Caption = 'WIA'
Position = poScreenCenter
object PageControl1: TPageControl
ActivePage = tsLog
Align = alClient
TabOrder = 0
object tsLog: TTabSheet
Caption = 'Log'
object memLog: TMemo
Align = alClient
ScrollBars = ssVertical
TabOrder = 0
end
end
object tsImage: TTabSheet
Caption = 'Bild'
ImageIndex = 1
object imgImage: TImage
Align = alClient
Center = True
Proportional = True
Stretch = True
end
end
end
object btnGo: TButton
Left = 728
Top = 4
Width = 123
Height = 49
Anchors = [akTop, akRight]
Caption = 'Go!'
TabOrder = 1
OnClick = btnGoClick
end
object StatusBar1: TStatusBar
end
end
kıdemsiz üye