Hallo miteinander,
gibt es einen einfachen Weg, am besten mit ganz wenig Zeilen Code, um ein vom Scanner geliefertes Bild in den Speicher zu bekommen, um dann mit PB das Bild in einem bestimmten Ordner abzuspeichern?
Bild kann/soll in Originalgröße verbleiben, evtl. höchstens modifiziert als s/w.
Hat da schon mal jemand was mit gemacht, gibt es da irgendwelche Codezeilen für?
Frdl. Gruss
Hiltwin
Bild vom Scanner einlesen / weiterverarbeiten
- Captn. Jinguji
- Beiträge: 397
- Registriert: 07.06.2005 19:47
- Computerausstattung: PB 4.73x64, i7, WIN 10x64, ATI NVidia RTX 2070
- Wohnort: Witten
Hmm... dürfte nicht mit ein paar Zeilen zu machen sein, selbst das CodeArchive schweigt sich aus.
Ansätze finden sich halt hier: http://www.jse.de/download.html
da die allermeisten Scanner TWAIN basiert sind, aber:
Ansätze finden sich halt hier: http://www.jse.de/download.html
da die allermeisten Scanner TWAIN basiert sind, aber:
TWAIN SDK
The sales of the TWAIN Integration Kit 2.0 has been discontinued. If you are interested in a 32 bit or 16 bit Wincows DLL based TWAIN SDK please contact the JSE support.
Ist das Kunst hier, oder kann das weg ?
- Falko
- Admin
- Beiträge: 3535
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit) - Kontaktdaten:
Mit EZTWAIN wäre sowas möglich. Ich hoffe dies hier ist brauchbar
Ich habe den Originalsource von Num3, aus dem englischen Forum,
zum EZTWAIN modifiziert. Die ganzen gotos rausgeschmissen und
eine Bildanpassung dazu erstellt.
Hier kann man sich die folgende Zip runterladen: http://www.dosadi.com/ezt1_download.htm
Im Ordner ..\EZTWAIN1\VC\RELEASE
sind EZTW32.dll und EZTW32.lib enthalten, die ins Verzeichnis zu diesem
Code kopiert werden sollten.
[Edit]
Nochmal erweitert auf ClipboardImage. Es gibt noch viele tolle
Funktionen mehr, die man sich aus den Beispielen entnehmen kann.
Um auf Farbe, Grau oder Schwarz/Weiß um zu stellen, kann man
den Wert von PixelType ändern. Die Version wird oben im Titel angezeigt.
Ich habe die gebräuchlichsten Funktionen angepasst sowie alle
möglichen Funktionen mit eingebaut, die aber evtl. noch
angepasst werden müssen. Am besten mal im Ordner VC gucken,
dort sind die Parameter gut erklärt.
[/Edit]
[Edit]
Weitere Beispiele im PB-Source hinzugefügt. 18.06.2009
[/Edit]
Gruß Falko

Ich habe den Originalsource von Num3, aus dem englischen Forum,
zum EZTWAIN modifiziert. Die ganzen gotos rausgeschmissen und
eine Bildanpassung dazu erstellt.
Hier kann man sich die folgende Zip runterladen: http://www.dosadi.com/ezt1_download.htm
Im Ordner ..\EZTWAIN1\VC\RELEASE
sind EZTW32.dll und EZTW32.lib enthalten, die ins Verzeichnis zu diesem
Code kopiert werden sollten.
Code: Alles auswählen
;Grundgerüst von Num3
;http://www.purebasic.fr/english/viewtopic.php?t=10376&highlight=twain
;Angepasst auf PB 4.31 in verbindung mit EZTWAIN.DLL und Libraty von Falko
;Downlaod Twain.DLL plus lib hier: http://www.dosadi.com/eztwain1.htm
ExamineDesktops()
UsePNGImageEncoder()
Import"EZTW32.lib"
;Diese Funktionen sind soweit getestet und angepasst
TWAIN_IsAvailable() As "_TWAIN_IsAvailable@0"
TWAIN_SelectImageSource(hWnd.l) As "_TWAIN_SelectImageSource@4"
TWAIN_AcquireToFilename(hWnd.l, picpath.s) As "_TWAIN_AcquireToFilename@8"
TWAIN_AcquireToClipboard(hWnd.l,wPixTypes.l) As "_TWAIN_AcquireToClipboard@8"
TWAIN_CloseSource()As "_TWAIN_CloseSource@0"
TWAIN_CloseSourceManager(hWnd) As "_TWAIN_CloseSourceManager@4"
TWAIN_EasyVersion() As "_TWAIN_EasyVersion@0"
TWAIN_State() As "_TWAIN_State@0"
TWAIN_DibDepth(hWnd.l) As "_TWAIN_DibDepth@4"
TWAIN_DibHeight(hWnd.l) As "_TWAIN_DibHeight@4"
TWAIN_DibNumColors(hWnd.l) As "_TWAIN_DibNumColors@4"
TWAIN_DibWidth(hWnd.l) As "_TWAIN_DibWidth@4"
TWAIN_AcquireNative(hWnd.l,wPixTypes.l) As "_TWAIN_AcquireNative@8"
TWAIN_LoadNativeFromFilename(File.s) As "_TWAIN_LoadNativeFromFilename@4"
TWAIN_LoadNativeFromFile(pszFile.l) As "_TWAIN_LoadNativeFromFile@4"
;Folgende Funktionen sind noch nicht angepasst!!
DIB_ReadRow(a.l,b.l,c.l) As "_DIB_ReadRow@12"
DIB_RowBytes(a.l) As "_DIB_RowBytes@4"
DllMain(a.l,b.l,c.l) As "_DllMain@12"
TWAIN_AbortAllPendingXfers() As "_TWAIN_AbortAllPendingXfers@0"
TWAIN_BreakModalLoop() As "_TWAIN_BreakModalLoop@0"
TWAIN_CreateDibPalette(a.l) As "_TWAIN_CreateDibPalette@4"
TWAIN_DS(a.l,b.l,c.l,d.l) As "_TWAIN_DS@16"
TWAIN_DisableSource() As "_TWAIN_DisableSource@0"
TWAIN_DrawDibToDC(a.l,b.l,c.l,d.l,e.l,f.l,g.l,h.l) As "_TWAIN_DrawDibToDC@32"
TWAIN_EnableSource(a.l) As "_TWAIN_EnableSource@4"
TWAIN_EndXfer() As "_TWAIN_EndXfer@0"
TWAIN_ErrorBox(a.l) As "_TWAIN_ErrorBox@4"
TWAIN_Fix32ToFloat(a.l) As "_TWAIN_Fix32ToFloat@4"
TWAIN_FreeNative(a.l) As "_TWAIN_FreeNative@4"
TWAIN_GetBitDepth() As "_TWAIN_GetBitDepth@0"
TWAIN_GetCapCurrent(a.l,b.l,c.l) As "_TWAIN_GetCapCurrent@12"
TWAIN_GetConditionCode() As "_TWAIN_GetConditionCode@0"
TWAIN_GetCurrentResolution() As "_TWAIN_GetCurrentResolution@0"
TWAIN_GetCurrentUnits() As "_TWAIN_GetCurrentUnits@0"
TWAIN_GetHideUI() As "_TWAIN_GetHideUI@0"
TWAIN_GetPixelType() As "_TWAIN_GetPixelType@0"
TWAIN_GetResultCode() As "_TWAIN_GetResultCode@0"
TWAIN_GetYResolution() As "_TWAIN_GetYResolution@0"
TWAIN_LoadSourceManager() As "_TWAIN_LoadSourceManager@0"
TWAIN_MessageHook(a.l) As "_TWAIN_MessageHook@4"
TWAIN_Mgr(a.l,b.l,c.l,d.l) As "_TWAIN_Mgr@16"
TWAIN_ModalEventLoop() As "_TWAIN_ModalEventLoop@0"
TWAIN_NegotiatePixelTypes(a.l) As "_TWAIN_NegotiatePixelTypes@4"
TWAIN_NegotiateXferCount(a.l) As "_TWAIN_NegotiateXferCount@4"
TWAIN_OpenDefaultSource() As "_TWAIN_OpenDefaultSource@0"
TWAIN_OpenSourceManager(a.l) As "_TWAIN_OpenSourceManager@4"
TWAIN_RegisterApp(a.l,b.l,c.l,d.l,e.l,f.l,g.l,h.l) As "_TWAIN_RegisterApp@32"
TWAIN_ReportLastError(a.l) As "_TWAIN_ReportLastError@4"
TWAIN_SetBitDepth(a.l) As "_TWAIN_SetBitDepth@4"
TWAIN_SetBrightness(a.l,b.l) As "_TWAIN_SetBrightness@8"
TWAIN_SetCapOneValue(a.l,b.l,c.l) As "_TWAIN_SetCapOneValue@12"
TWAIN_SetContrast(a.l,b.l) As "_TWAIN_SetContrast@8"
TWAIN_SetCurrentPixelType(a.l) As "_TWAIN_SetCurrentPixelType@4"
TWAIN_SetCurrentResolution(a.l,b.l) As "_TWAIN_SetCurrentResolution@8"
TWAIN_SetCurrentUnits(a.l) As "_TWAIN_SetCurrentUnits@4"
TWAIN_SetHideUI(a.l) As "_TWAIN_SetHideUI@4"
TWAIN_SetXferMech(a.l) As "_TWAIN_SetXferMech@4"
TWAIN_ToFix32(a.l,b.l) As "_TWAIN_ToFix32@8"
TWAIN_UnloadSourceManager() As "_TWAIN_UnloadSourceManager@0"
TWAIN_WaitForNativeXfer(a.l) As "_TWAIN_WaitForNativeXfer@4"
TWAIN_WriteNativeToFile(a.l,b.l) As "_TWAIN_WriteNativeToFile@8"
TWAIN_WriteNativeToFilename(a.l,b.l) As "_TWAIN_WriteNativeToFilename@8"
TWAIN_XferMech() As "_TWAIN_XferMech@0"
EndImport
Global window_0=0
Enumeration
#cmdSelect
#cmdScan
#cmdScanClip
;#cmdView
#img
EndEnumeration
;-- TWAIN_AcquireNative(HWND hwndApp, unsigned wPixTypes)
#TWAIN_BW = 1 ; 1-bit per pixel, B&W (== TWPT_BW)
#TWAIN_GRAY = 2 ; 1,4, Or 8-bit grayscale (== TWPT_GRAY)
#TWAIN_RGB = 4 ; 24-bit RGB color (== TWPT_RGB)
#TWAIN_PALETTE =8 ; 1,4, Or 8-bit palette (== TWPT_PALETTE) hImage.l
#TWAIN_ANYTYPE =0 ;any of the above
;-- TWAIN_FreeNative(HANDLE hdib);
; 1 bit B&W 8-bit grayscale 24-bit color
; 100 dpi 1.25KB 10KB 30KB
; 200 dpi 5KB 40KB 120KB
; 300 dpi 11.25KB 90KB 270KB
; 400 dpi 20KB 160KB 480KB
;-- TWAIN_State(void) -- Returns the TWAIN Protocol State per spec.
#TWAIN_PRESESSION=1 ; source manager Not loaded
#TWAIN_SM_LOADED=2 ;source manager loaded
#TWAIN_SM_OPEN=3 ;source manager open
#TWAIN_SOURCE_OPEN=4 ;source open but Not enabled
#TWAIN_SOURCE_ENABLED=5 ;source enabled To acquire
#TWAIN_TRANSFER_READY=6 ;image ready To transfer
#TWAIN_TRANSFERRING=7 ;image in transit
Declare.l DrawPic(hImage)
Define.f imgW,imgH,TW,TH
Define.l Teiler,hImage,hWnd
picpath.s = GetPathPart(ProgramFilename())+"pic.bmp"
Procedure.l DrawPic(hImage) ; Hiermit wird das Bild im Verhältnis angepasst im Window ausgegeben.
If hImage
imgW.f=ImageWidth(#img)
imgH.f=ImageHeight(#img)
TW.f=imgW/767
TH.f=imgH/420
If TW>TH
Teiler=Round(TW,#PB_Round_Up)
Else
Teiler=Round(TH,#PB_Round_Up)
EndIf
If Teiler=0
Teiler=1
EndIf
StartDrawing(WindowOutput(0))
DrawImage(hImage, 10,50,imgW/Teiler, imgH/Teiler)
StopDrawing()
result = 1
Else
result = 0
EndIf
ProcedureReturn result
EndProcedure
hWnd = OpenWindow(window_0, (DesktopWidth(0)-767)/2, (DesktopHeight(0)-476)/2, 767, 476, "SCAN Ver: "+Str(TWAIN_EasyVersion()), #PB_Window_SystemMenu)
If hWnd = 0
End
EndIf
ButtonGadget(#cmdSelect, 10, 10, 190, 30, "Auswahl TWAIN - Treiber")
ButtonGadget(#cmdScan, 210, 10, 190, 30, "SCAN zu BMP")
ButtonGadget(#cmdScanClip, 410, 10, 190, 30, "SCAN zu Clipboard")
;Debug TWAIN_State()
;-- Test Twain_AcquereNative
MessageRequester("Twain_AcquereNative", "Mit Twain_AcquereNative wird der Twainmanager sofort gestartet"+#CRLF$+"und die Bildeigenschaften ausgegeben")
hdib.l=TWAIN_AcquireNative(hWnd.l,0)
If hdib
Debug "Bittiefe bits/Pixel= "+Str(TWAIN_DibDepth(hdib))
Debug "Anzahl der Farben der Farbtabelle von DIB= "+Str(TWAIN_DibNumColors(hdib))
Debug "Bildhöhe in Pixel= "+Str(TWAIN_DibHeight(hdib))
Debug "Bildbreite in Pixel = "+Str(TWAIN_DibWidth(hdib))
EndIf
MessageRequester("TWAIN_LoadNativeFromFilename(File)", "Mit TWAIN_LoadNativeFromFilename(File) laeds Du irgendeine Bitmap-File."+#CRLF$+"Danach erneut eine Ausgabe der Bildeigenschaften")
;-- Test Twain_LoadNativeFromFilename
File.s=OpenFileRequester("Bild laden","Twain.bmp","Bitmaps(bmp)|*.BMP",0)
If File
hdib = TWAIN_LoadNativeFromFilename(File)
Debug "Bittiefe bits/Pixel= "+Str(TWAIN_DibDepth(hdib))
Debug "Anzahl der Farben der Farbtabelle von DIB= "+Str(TWAIN_DibNumColors(hdib))
Debug "Bildhöhe in Pixel= "+Str(TWAIN_DibHeight(hdib))
Debug "Bildbreite in Pixel = "+Str(TWAIN_DibWidth(hdib))
EndIf
MessageRequester("Hauptprogramm", "Jetzt dürft ihr selbst was auswählen und scannen :)")
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_Gadget
Select EventGadget()
Case #cmdSelect
TWAIN_SelectImageSource(hWnd)
Debug TWAIN_State()
Case #cmdScan
TWAIN_AcquireToFilename(hWnd, picpath)
hImage=LoadImage(#img, picpath)
SaveImage(#img,GetPathPart(ProgramFilename())+"pic.png",#PB_ImagePlugin_PNG )
DrawPic(hImage)
Case #cmdScanClip
TWAIN_AcquireToClipboard(hWnd,0) ;0 = Vom Twain eingestellte Vorgabe. Andere Einstellungen, siehe ;PixTypes Constants
TWAIN_CloseSource()
hImage= GetClipboardImage(#img)
DrawPic(hImage)
EndSelect
EndSelect
Until EventID = #PB_Event_CloseWindow
End
Nochmal erweitert auf ClipboardImage. Es gibt noch viele tolle
Funktionen mehr, die man sich aus den Beispielen entnehmen kann.
Um auf Farbe, Grau oder Schwarz/Weiß um zu stellen, kann man
den Wert von PixelType ändern. Die Version wird oben im Titel angezeigt.
Ich habe die gebräuchlichsten Funktionen angepasst sowie alle
möglichen Funktionen mit eingebaut, die aber evtl. noch
angepasst werden müssen. Am besten mal im Ordner VC gucken,
dort sind die Parameter gut erklärt.
[/Edit]
[Edit]
Weitere Beispiele im PB-Source hinzugefügt. 18.06.2009
[/Edit]
Gruß Falko