PC Review


Reply
Thread Tools Rating: Thread Rating: 4 votes, 3.75 average.

WIA.ImageFile to System.Drawing.Image

 
 
Jeremy
Guest
Posts: n/a
 
      5th Jan 2006
I am creating an imaging service using WIA (Windows Imaging
Acquisition).

The problem is that I cannot convert a WIA.ImageFile to a
System.Drawing.Image to put a timestamp on the image without first
saving the file using the wia.imagefile.savefile then loading it again
using System.Drawing.Image.FromFile. This seems pretty ineffecient. I
have tried coverting it using ctype, but I get an invalid cast
exception. Is anyone aware of how to accomplish this without saving and
reloading the file? I appreciate your time...

Thanks,
Jeremy

Dim mydevice As WIA.Device
Dim manager As New WIA.DeviceManagerClass
Dim mydialog As New WIA.CommonDialogClass
Dim strcmdTakePicture As String =
WIA.CommandID.wiaCommandTakePicture
Dim strImageformat As String = WIA.FormatID.wiaFormatJPEG
Dim myItem As WIA.Item
Dim myImage As WIA.ImageFile
Dim strFilePath As String = Application.StartupPath &
"\Images\Dummy.jpg"

For Each info As WIA.DeviceInfo In manager.DeviceInfos
'Connect w/o dialog
If info.DeviceID =
"{6BDD1FC6-810F-11D0-BEC7-08002BE2092F}\0000" Then
mydevice = info.Connect
End If
Next

If IsNothing(mydevice) Then
mydevice =
mydialog.ShowSelectDevice(WIA.WiaDeviceType.VideoDeviceType, False,
True)
End If

myItem = mydevice.ExecuteCommand(strcmdTakePicture)

myImage = CType(myItem.Transfer(strImageformat), WIA.ImageFile)

'Need to covert to image here instead of SaveFile
myImage.SaveFile(strFilePath)

 
Reply With Quote
 
 
 
 
Ken Tucker [MVP]
Guest
Posts: n/a
 
      5th Jan 2006
Hi,

Maybe this will help

http://msdn.microsoft.com/coding4fun...e/default.aspx

Ken
--------------
"Jeremy" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
>I am creating an imaging service using WIA (Windows Imaging
> Acquisition).
>
> The problem is that I cannot convert a WIA.ImageFile to a
> System.Drawing.Image to put a timestamp on the image without first
> saving the file using the wia.imagefile.savefile then loading it again
> using System.Drawing.Image.FromFile. This seems pretty ineffecient. I
> have tried coverting it using ctype, but I get an invalid cast
> exception. Is anyone aware of how to accomplish this without saving and
> reloading the file? I appreciate your time...
>
> Thanks,
> Jeremy
>
> Dim mydevice As WIA.Device
> Dim manager As New WIA.DeviceManagerClass
> Dim mydialog As New WIA.CommonDialogClass
> Dim strcmdTakePicture As String =
> WIA.CommandID.wiaCommandTakePicture
> Dim strImageformat As String = WIA.FormatID.wiaFormatJPEG
> Dim myItem As WIA.Item
> Dim myImage As WIA.ImageFile
> Dim strFilePath As String = Application.StartupPath &
> "\Images\Dummy.jpg"
>
> For Each info As WIA.DeviceInfo In manager.DeviceInfos
> 'Connect w/o dialog
> If info.DeviceID =
> "{6BDD1FC6-810F-11D0-BEC7-08002BE2092F}\0000" Then
> mydevice = info.Connect
> End If
> Next
>
> If IsNothing(mydevice) Then
> mydevice =
> mydialog.ShowSelectDevice(WIA.WiaDeviceType.VideoDeviceType, False,
> True)
> End If
>
> myItem = mydevice.ExecuteCommand(strcmdTakePicture)
>
> myImage = CType(myItem.Transfer(strImageformat), WIA.ImageFile)
>
> 'Need to covert to image here instead of SaveFile
> myImage.SaveFile(strFilePath)
>



 
Reply With Quote
 
 
 
 
Jeremy
Guest
Posts: n/a
 
      5th Jan 2006
Thanks for your reply Ken. Actually this is one resource I used to
learn WIA. In the example however, he simply saves the file. I want to
convert it to a System.Drawing.Image first so I can alter the image
(add a time stamp). You can not programatically alter a wia.imagefile.
I was hoping someone could assist me in coverting a wia.imagefile to a
drawing.image without saving and reloading the file. Dim bmap as Image
= ctype(MyWiaImage,Image) causes an invalid cast exception.

 
Reply With Quote
 
New Member
Join Date: Apr 2009
Posts: 1
 
      21st Apr 2009
I ran into this issue myself, and googled it to find the solution. I found this thread, which is duplicated on several sites all over the net, but the suggested solution is flawed (the author of the response refers to an article which doesn't cover the issue).

However, the solution is easy, - the BinaryData()-method does the trick:

WIA.ImageFile imagefile = item.Transfer(format) as WIA.ImageFile;
imageBytes = (byte[])imagefile.FileData.get_BinaryData(); // <-- Converts the ImageFile to a byte array

MemoryStream ms = new MemoryStream(imageBytes);
Image image = Image.FromStream(ms);
image.Save("c:/testImage.jpg"); // <-- Converts the byte array to a System.Drawing.Image


Regards
Espen S
http://www.drivstoffguiden.no
 
Reply With Quote
 
 
 
Reply

Thread Tools
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off



Features
 

Advertising
 

Newsgroups
 


All times are GMT +1. The time now is 04:14 AM.