AccessImagine is ActiveX component for storing images in various projects as easy as possible. You need to place it on form while designing your application and bind to some database field.
Warning! Never do not copy-paste AccessImagine object, it gets broken. Always insert new AccessImagine object through Insert ActiveX Control.
AccessImagine features:
- JPEG, BMP, GIF and PNG file formats support
- store images in JPEG format to save space
- get images from TWAIN and WIA devices
- get images from video sources (including webcams)
- paste image from any Windows application
- in-place image croping tool
- HTTP images display
- OLE fields support
- previews in JPEG and OLE formats (for displaying in continuous forms)
- external image storage
- on-click big image display
Design time component properties
These options are available in property inspector, when you design a form, report or application.
Background
Specify the control background in hex form (i.e. 00000 is black and FFFFF is white)
Cropping
Cropping type selection:
- Proportional – cropping tool keeps control’s proportions
- Normal – crop any proportions
- Auto – images are automatically cropped to control’s proportions on insertion
EmptyImage
You can select the appearance of control when it is empty. It can be a Contact sign, Photo sign or simple brick (None).
MaxWidth and MaxHeight
If the image exceeds these constrains it will be proportionally scaled down. This applies only when image is saved while preserving full image size for cropping.
StoragePath
In order not to keep images in database you need to specify a location for them. Bind component to database field which holds image file names in this case. Examples of valid locations’ paths:
- “D:\MyWork\Images”
- “\\Avenger\Incoming\Pics” – local network path (for centralized storage, etc.)
- “Pics” – a subfolder in the folder, where your database file is stored
- “.” – keep images in the same folder with the database file
If empty.jpg image is present at StoragePath location, it will be used for empty control display
HideButtons
Set this to “Yes” if you don’t want to show the control buttons. It will look just like regular image this way.
OnClick
You can select the control’s behaviour when the user clicks the image.
- None – do nothing
- ShowFullPicture – show picture in new window, scaling it down to fit the screeen, if it is too big
- ShowPanPicture – show picture in new window 1:1 size, giving the ability to pan via a hand tool
- OpenPictureFile – open picture with the external application, that is associated with JPG filetype
Scripting options
EmptyText
The text shown where there is no image (usually “No Image“). Can be set to empty string.
Image
Represents the picture in the control, both reads and writes are allowed.
ImageBind
Data bound to control (like ControlSource). Use it for late binding or if usual field binding is not available (i.e. at Access 97)
InstantScan (delay)
Makes instant scanner/webcam image capture without user’s assistance. Will wait delay seconds after device initialization before taking image (it may be needed for some cams that adjust focus/brightness at first few seconds).
Changed
Checks if image has been changed since the last invocation of this function.
PreviewJPG(Size) and PreviewOLE(Size)
These functions generate small previews of the image in control. Size specifies the longest side of the preview, if omitted it defaults to 64 pixels. If you need to save OLE previews along with your images, add the following code to Exit event procedure of the AccessImagine object:
If <AccessImagine>.Changed Then <OLE preview field>.Value = <AccessImagine>.PreviewOLE
LoadFile(filename)
Loads image from file or web (HTTP). Supports JPEG, BMP, GIF and PNG file formats.
SaveFile(filename)
Saves image to file. Supports only JPEG format.
Scanning
Set to 0 to disable Use device button. Set to 1 to activate instant image capture without any dialogs.
TurnRight and TurnLeft
Rotates image 90 degrees clockwise and anti-clockwise.
Copy
Copies current image to clipboard, making it possible to paste image into another application.
Crop X,Y,X1,Y1
Crops the image with the given coordinates rectange.
PicWidth and PicHeight
Return the bitmap image dimensions.
Paste
Inserts image from the clipboard.
Rename(filename)
Rename file in external storage. For that cases, when you need to overcome auto-generated names.
Scan
Aquire image from last used source.
ScanSource
Read/write property, id of image source, where -1 is WIA, -2 is TWAIN, -3 is Microsoft WDM, 0 and up – direct webcams.
SelectSource
Opens source selection dialog.
ShowFullPicture and ShowPanPicture and OpenPictureFile
Perform the corresponding action from OnClick property description.
so, what limitations are there before buying?
ah, i see… just checked your “buy” page. thanks.
It doesn’t have any limitations, xcept some visual “non-bought” reminders.
I’ve downloaded and added to one of my ‘Forms’ and picture works well. I need to add to a Data Access Page so I picture is included in the Database on my website. I can see any info on making this work?
AccessImagine stores pictures as regular JPG files, so you can use a lot of ways to display it on website.
Howevever, there is no good way to expose the AccessImagine control to web-users.
Can I use this app to display a picture fullframe on an extended desktop (a digital projector) with no borders while showing database form on main lappy screen?
I have a photography judging database. having this ability will save lots hassels.
I’m sorry to state that AccessImagine doesn’t have direct solution for this.
But if you manage somehow to create form that fills your screen without borders, you can place any control on it to reach the desired effect.
I have found no documentation on printing a picture after you have added to a form. Is it possible? How is it done?
When I open the database form on a computer that does not have the AccessImagine script installed, I get an error of, “There is no object in this control”.
Is that expected behavior? Can the script not be embedded in the database or does it have to be installed on all computers running the database?
AccessImagine component have to be installed on all computers you are using your database on, because ActiveX are system-level components.
There are some tricks to make database to install AccessImagine automaticly, like in sample database (http://access.bukrek.net/tutorial/ms-access-sample-database), but you wouldn’t use it, until it really becomes a problem to double-click an AccessImagine installer once.
Why do I not have the “Save to file” option in my AccessImagine screen?
There is no such an option for end-user. Image can be saved to file via VBA command Pic.SaveFile(“filename.jpg”)
You can create a special button near the image and make it to save picture.
HI Max, I am having trouble with Pic.SaveFile(“filename.jpg”). It is ignoring my file name and using the default e.g. “Scan3.jpg”. My code is…
Private Sub SaveButton_Click()
Pic.SaveFile (“testimage.jpg”)
End Sub
My ActiveX oject is named “Pic”. What am I doing wrong?
Make sure that you do not have StoragePath specified as it will make AccessImagine to save images automatically there.
Thanks to the programmer.It seems to be very easy.Thanks anyway.
Can the crop size be set to a certain dimension?
Nope, it cant. But you can crop image by script command Crop X,Y,X1,Y1 in desired way.
Did you explain a VBA, how to use Crop X, Y, X1, and Y1?
Its simple. For example, I want to crop image and leave 50×50 pixels in center of the image:
Pic.Crop Pic.Width/2-25, Pic.Height/2-25, Pic.Width/2+25, Pic.Height/2+25
I have an access 2002 database linked to a sqlserver 2008R2 database. In a table there are bitmap images stored in a field of varbinary(MAX) type. These images are NOT loaded by Access using the OLE object but they are uploaded with BULK Tsql script. This control seem not to work with this type of data, infact if i bind it to the field a popup error “JPEG ERROR 53” appears.
Any ideas?
Thank you
There may be 2 reasons for this:
1. Pictures in database are not JPG files. AccessImagine expects JPG type only in database field.
2. Your way of insertion may add some additional info to the binary field.
Anyway, you should save the images to files and then reload them using AccessImagine. This can be done with simple 3-lines VBA script.
Please, write to our support e-mail, if you need further assistance.
Does it work with vb asp.net?
It works good with VB.NET, here is a tutorial – http://access.bukrek.net/tutorial/dot-net
I realize that once loaded the image on to the control (text, for external storage idea), then the filename has been changed from the original file. Is there any way to change the filename that load to control to what we need? Thanks
Yep, AccessImagine uses automatic file naming for external storage. It makes all the work about it and you do not have to worry about this.
What for you need to preserve the original filename?
I have database for thousands of product and have separate management for the photos referred to each record. So just thought that it might be easier if we have the file naming rules to be easily eplace some photo files directly to the external file-folder to have less time for the database management to run loading the image into the database again.
But in fact, it’s true that to have different management will make some headaches.
So if you may suggest some further idea for this, it would be very much appreciated. Above of all this, your AccessImagine was cool. Thanks
Now I see why do you need this.
For now there is no nice way to preserve the filename. We will add this function in next update this week.
Hi,
This component works with .mp3 or .pdf files ?
Ie I can drag and drop a mp3 file?
Another question is if instead of storing in an ole field, it could store the path of the dropped file, not the file?
Thanks and sorry for my english.
AccessImagine is specially created for images, thats why it doesn’t accept .mp3 or .pdfs.
AccessImagine can handle external image storage, saving images to some folder and placing its filename in database.
Your English is OK ;-)
Works OK with local database however I cannot store images to Sql server back end via my MS Access form. What field type should the Sql Server table be set to. Any other help would be great…
You can use any of BLOB-type SQL Server fields, it should work good.
Our Access 2010 back-end is reaching the 2GB limit thanks to loads of photos already stored in it. Is there a procedure for stripping images from an existing database and replacing them with new AccessImagine links?
Yep, this can be done via simple VBA script, that passes all the records and makes NewPic.Image=OldPic.Image
NewPic should be AccessImagine object bound to new text field and set up for external storage, OldPic – AccessImagine objected bound to old picture field.
When invoked in code, Paste does not paste the contents of the clipboard but instead opens the TWAIN source.
e.g. where source is an OLE and Target is the AccessImagine ActiveX control:
ctlSource.Action = acOLECopy
ctlTarget.Paste
calls the TWIN object
How do I resolve this?
Thats strange behavior, we will test it in few days.
We have a sort of vacations right now, sorry.
By the way, are you trying to transfer old OLE pictures this way? It will not give good results.
Take a look at http://www.lebans.com/oletodisk.htm
This tool will help you to save OLE pictures, and then you can import as AccessImagine objects.
How do you export the images?
This is truly an amazing software. It makes managing pictures sooo easy. But I am getting this error “could not update currently locked by another session on this machine” Access allows me edit the other controls on the form except for the picture control. Another form that I have a picture control on, no problem. Can’t figure it out. I don’t have any record locks set on the form.
1. Can a report be generated from the data?
2. Can the image holder background be changed to white.
3. Can the image be centered in the image holder?
Thanks,
JR
1. Yep, AccessImagine objects are displayed in reports the same way. Nothing special here.
2. Yep (EmptyImage=”White”)
3. Nope
Hallo Max,
How is it possible that on a form the control is growing when I go to the next record, and when I do it several times it growing and growing.
This is caused by boundary option MS Access bug. Turn off AccessImagine boundary.
I am using the remote file option (not storing image on a database). How do I specify the name of the image file saved on the remote location?
You can’t specify image filename, AccessImagine names it automatically.
you could add a field prorpiedades so you can specify the naming of the files, and it was possible to be passed by vba
You can bind AccessImagine to some field, that will be used as source for filenames (like an ID field os some query composed field).
I am having an issue setting a a relative storage path. I want to store images in a sub-folder of my main DB called images, when I try to enter the path as “images” I get
“Invalid storage path.Invalid file name – %s”
The folder exists and has write permissions, have also tried “\images” same result.
Amy idea what is wrong?
Greetings!
Microsoft Access is not very polite about current path. When you open database thru “File-Open” dialog, it sets current path to dabase folder. If you open it by double-clicking in Explorer – it does not.
Hi – just a quick question:
Can the StoragePath be set programmatically? Example: click a button – on click-event launches some VB code that sets StoragePath to a value held in a settings table.
Yep, you can change StoragePath and other design-time properties from VBA.
I’ve tried the following:
Private Sub Command1_Click()
Forms!myform1!SmartPhoto!StoragePath = “C:/”
End Sub
and I get:
‘Run-time error 451: Property let procedure not defined and property get procedure did not return an object’
(SmartPhoto is the name of an AccessImagine active-x control)
Thats strange. Maybe that outdated syntax doesn’t support ActiveX properties?
Try
SmartPhoto.StoragePath=”c:\”
Also, I notice that the control renames the image files. It would be nice if a naming pattern could be specified.
AccessImagine tries to save original filename (depending of it origins).
At this moment there is no way to change automatical naming.
It would be nice to have the option of disabling the renaming – so that the original filename is preserved.
We will make some fixes to this in next release.
Ah yes I think this is what I need!
I can’t seem to make it rename the pictures myself to what I want them named..
I give my own name to the pictures.
I load or save them included the path, where they must be saved.
I don’t use the possibility of the ocx-saving.
If you are interested in my solution let me know.
I used a tabbed form with photos on the first tab. But this software seems to not recognize that I only want the photo to show up on the first tab, and not on the others in the same record. Is there a workaround?
Greetings!
I’ve just checked at Access 2010 – AccessImagine behaves properly with tabs.
Just in case, maybe AccessImagine doesn’t recognized you placed it on tab? Please delete it, select the desired tab, click in it’s inner field and then press to insert AccessImagine object.
Could you please do a tutorial on how you go about saving a pictures path/location to the database. I am trying to catalogue images but with to have them in an external folder called images.
Regards
Ade
There is a tutorial for this – http://access.bukrek.net/tutorial/storage
Please write back if you need more info.
Great program!!! Is there a way to hide the buttons through VBA?
Yes, you can set Pic.HideButtons = true trough VBA as well.
Hi Max,
Thanks for adding the proportional crop feature. How do you use it?
It is enabled by default. When it comes to crop, you can crop only in proportions of control.
I get it! Thanks Max.
I installed this in an Access .accdb file that linked to a Sql Server 2008R2 database containing a varbinary(max) field. The photos were intended to go into that field. I installed the image control opened the form and selected an image. All fine. When I try to move off the record (write it to the database) I get an ‘ODBC– call failed. [Microsoft][Sql Server Native Client 10.0]String data,right truncation (#0) error.
I tested it out by creating an .adp file linked to my sql server with a varbinary(max) photo field and it worked great. It could not seem to work with an .accdb file linked to my sql server through odbc however. see my earlier comment.
I suppose that this is some ODBC connection limitation.
As alternative you can use external image storage feature.
Hi. I have got this amazing tool working great in my database with the images stored nicely in subfolders. However I have noticed when you delete an image the image gets deleted from the external location but the filename stays in the field of the table. Is there a way to remove it from here as well. I ask because currently it makes it hard to run queries and check for missing images in records as the filename field is still populated with the old filename. Thanks for such a great tool!
Thank you!
Yep, now the image filename is not removed intentionally (for that scenarios when fields are prepopulated with filenames or some other field like ID is used as filenames source).
The are 2 ways – either you need to check files existance in your scripts, or use pre-1.50 AccessImagine versions.
I am trying to use TurnRight to get a picture to rotate within a report. It is not working. I may possible be applying it incorrectly. Can you please help?
I’m not able to do this simple way too.
Here’s the hard way:
1. Put one invisible AccessImagine object and bind it to the picture field.
2. Put one visible AccessImagine object and do not bind it.
3. Write Data Area Format event:
VisibleAccessImagine.Image = InvisibleAccessImagine.Image
VisibleAccessImagine.TurnRight
Can you expand on your comment “Write Data Area Format Event”? I’m not following… Thanks.
Hi is there a way to use the OnClick event with the accessImage control other than opening up larger versions of the image? I want to create an accessImage_Click event so when the user clicks it ill have it run some code is this possible? if so how.
thanks
Nope, there is no way to do this due to MS Access restrictions.
Hi,
I’m trying to TurnRight a picture and can’t figure it out. I’ve looked at the example using “the hard way” with a hidden bound and visible non-bound AccessImagine object.
You mention to “Write Data Area Format event”. What’s an “Area Format event”? I’ve tried a button with a similar code as your example and still get “problems with ActiveX controls” errors.
This means “write [Data Area] [Format] event”
How do i use turnleft/turnrigth in VBA and activate by clicking a button in my form? My button control name is Button1 and my accessimagine control name is pic1
(I don’t have English Access right now)
Select your Button1, go to Events, press on On Button Press and select third choice.
Write
pic1.TurnLeft
there.
Not working for me.
pic1 should be changed to your AccessImagine object name
Can I please have sample code to use this from a button click in Access 2010.
If your AccessImagine object is called “Pic”, add this code to the button:
Pic.Scan
thanks, this is what I am doing:
Picture1.StoragePath = “F:\Photos\”
Picture1.SelectSource
Picture1.Scan
Picture1.Rename (Me.fileno)
only problem is clicking cancel on selectsource still brings up the .scan from previous use. If the user decides to cancel source selection then it pic.scan shouldn’t execute. thanks in advance.
how do i stop .scan from executing if cancel is applied on select source? thanks
At this moment there is no way to detect Cancel click here.
New update is planned in a day or two, I will try to add this functionality.
Ok, that would be great thanks. Also, when I do capture a photo it appears only on about 3/4 of the control, is this my camera setting or ..?
What do you mean 3/4? Please send a screenshot at access@bukrek.net
Download updated AccessImagine 1.65. You can use such a move with it:
if Picture1.SelectSource then
Picture1.Scan
Picture1.Rename (Me.fileno)
EndIf
I save images in the database accessimagine
I would like to capture full size pictures with my surface 3. 1980×1280 pix but I don’t get higher than 340px how can we fix that issue?
I have windows 10, and access 2013
Please send a screenshot with capture window at max@bukrek.net
Max, I send you the screenshot. Thank for help
hello, is it possible to reset the activex control via vba, so that there is no image shown?
i use the following code:
If Dir(str_picture) “” Then
Me.pic_inv.LoadFile (str_picture)
Me.pic_inv.HideButtons = True
Else
XXXXXXXXXXXXXXXXXXXXXXXXX <—- here i need a command to reset
Me.pic_inv.HideButtons = False
End If
thanks for helping
Here it is:
Me.pic_inv.Image = null
Dear Max:
AccessImagine Rocks!… Thanks!
I understand it’s not intended to be a full image-editing software, and you cleverly added the OpenPictureFile option to the onClick parameter, so I can open my pictures with my default software.
Now, I can edit the picture and save the changes to the physical file before returning to Access, but then the file is overwritten by AccessImagine with the original bitmap?.
Is there a way to re-load from file after being opened by the external software?… Could you recommend an alternative workaround?
thanks in advance!
Thank you!
If you use external image storage, the changes will be saved )
picture2.LoadFile”D:\MyWork\Images”+me.passport+”.jpg”
if there is no such picture for the current passport then what should picture2.loadfile produce 0 or false etc please help me out to create the message if there is no picture and picture2.loadfile should be null I mean must be empty if there is no picture thankx
You can check if control is empty after load:
If IsNull(picture2.Image) Then …
Hi!
This is very good program :-)
But I have one little issue. I work on computer, that has installed version of the Access Imagine (AI). But if I make a new Access database, that doesn’t contain any pictures and I don’t need to use goodies from Access Imagine, when I open this new no pics database on other computer, that doesn’t have Access Imagine installed, it claims, that it can’t be opened because of missing AI. Temporarily you can install on that computer AI but this is not clean solution, that I’d like to follow. I’ve checked ActiveX i Access, so that I could disable this, but there are no information about AI. Please provide me some tips how to solve this issue.
Many thanks!
More likely you have inserted AccessImagine into that database and then deleted it.
Open VBA editor, open Tools->References menu and uncheck AccessImagine there.
Hi. What is the correct syntax in vba to change the settings of the “OnCLick” property of the image programmatically to one of the 4 possible choices (None, ShowFullPicture, ShowPanPicture, OpenPictureFile)? I tried
image.OnClick = “None”
but got an error. Thanks.
The correct syntax is:
image.OnClick = ShowPanPicture
But “None” is reserved keyword, so use 0 instead.
Thank you very much. It works perfectly. Now that everything works as expected and required I guess I’ll buy/pay the license.
Sorry – my answer went out as “anonymous”. Didn’t want it this way. So here is:
Thank you very much. It works perfectly. Now that everything works as expected and required I guess I’ll buy/pay the license.
Hi, I’ve been using AccessImagine in a Access 2007 database successfully for several months now; however, the users have just upgraded to Access 2013 and now only half of the control is actually visible and it appears to be locked, i.e. the buttons no longer appear when the user hovers over the control. The control is currently located within an Access Tab control and I’ve noticed that the control works fine if placed outside of the Tab control; I also get a message “Cannot allocate the D.I.B. handle” if I attempt to cut and paste the control somewhere else on the form. Any help/suggestions much appreciated. Thank you.
I should mention that this only appears to happen when the control is re-sized, i.e. made larger than it’s initial default!
I think this is an MS Access issue with Tab controls.
I only can recommend not to place AccessImagine at tab control or inside grids.
Hi, I ‘ve bought the control a couple of months ago and I am trying to clear the picture of the control by pressing a button. I tried:
objPic.LoadFile = “”
but is doesn’t clear the current photo on the control. Is there a way to do this without using the empty.jpg option?
Thanks a lot
Sure!
objPic.Image = null
It worked fine!! Thanks a lot for your instant support.
Max hi again, we use the AccessImagine object in an unbound customer form and since we don’t know whether the user has changed the image, we save it every time using code like the one below:
strNewImageName = Nz(objPic.Image, “”)
However if the user hasn’t changed the picture, this creates multiple identical photos in the folder.
Is there a way to know (something like a ‘change event’) whether the photo has been changed within the AccessImagine object.
Thank you in advance
Yep, you can use Pic.Changed:
if Pic.Changed Then …
The problem is that objPic.changed is set to 1 as soon as we open the form and call the objPic.LoadFile command in order to display the picture the customer already has. If we want to change the picture at that stage, the objPic.changed is always 1 and we have no way of knowing whether the picture was updated.
Indeed. So there is no way to check this in your scenario, sorry.
Why you do not use AccessImagine built-in external image storage functionality? You can bind it with VBA by setting Pic.ImageBind
I have one bind VBA form where it works fine. But I also have 3 unbound forms (it it required due to the client-server nature of our functionality for these forms) where we can’t make it work.
If there was a property (e.g. pictureUpdated) which would indicate that the photo was replaced by a user action it would be very very useful. Is there a chance that this could be included in the next version?
Thanks
Yep, I will make Pic.Change usable for your situation in next update. But it will not happen soon, as there is sense to make update for this fix only.
The only thing I can advise in your situation it to check image size (string length) if it has changed.
Thank you I appreciate it. One last question which is also causing us trouble. When we open one of our unbound forms and we use the objPic.LoadFile the photo is loaded fine. Then we use objPic.Image = null to clear the control in order to bring another customer for editing purposes. When we try to use the objPic.LoadFile at this phase (e.g. objPic.LoadFile “scan50.jpg”) to bring the new customer’s photo, AccessImagine creates a duplicate photo (e.g. scan51.jpg). How can we prevent the control from creating duplicates when we use .loadFile, just like it works for us the first time we call it when opening the form?
Hello again. Everything is working just fine with Access Imagine. However I would like to ask if there’s a way to “tweak” the settings of the simple USB camera I am using for capture, within an Access 2010 application. By tweak I mean setting resolution lower or higher, changing the quality/level of the image compression, etc… The camera is a Microsoft Lifecam 5000 HD, though sometimes I’d use different models. Thanks Max D.
Nope, there is no way to tweak camera settings.
Shots are always taken with highest quality and resolution possible.
Well noted. Thank you.