ImageEn for Delphi and C++ Builder ImageEn for Delphi and C++ Builder

 

ImageEn Forum
Profile    Join    Active Topics    Forum FAQ    Search this forumSearch
Forum membership is Free!  Click Join to sign-up
Username:
Password:
Save Password
Forgot your Password?

 All Forums
 ImageEn Library for Delphi, C++ and .Net
 ImageEn and IEvolution Support Forum
 AllAcquire.exe Wia only Scan Gray
 New Topic  Reply to Topic
Author Previous Topic Topic Next Topic  

Ralf

120 Posts

Posted - Apr 03 2017 :  11:04:09  Show Profile  Reply
Hi Nigel,
i tried to scan per WIA and set the color to Full Color. The Result is, that the scan is only in Gray when i doesn't use the Acquisition Dialog. When i use the dialog the scan is in Color.
Have you any idear?
Thanks
Ralf

Ralf

120 Posts

Posted - Apr 04 2017 :  04:46:50  Show Profile  Reply
Hi Nigel,
i made a few more test's Setting
AcquireParams.PixelType:= TIEAcquirePixelType( cmbColors.ItemIndex );
doesn't change the PixelType of the Scanner. Only the Acquisition Dialog can change the Color.
Ralf
Go to Top of Page

Ralf

120 Posts

Posted - Apr 04 2017 :  05:27:52  Show Profile  Reply
Hi Nigel,
using
case color of
1: Val:=WIA_INTENT_IMAGE_TYPE_GRAYSCALE;{Grau}
2: Val:=WIA_INTENT_IMAGE_TYPE_COLOR; {Farbe}
else Val:=WIA_INTENT_IMAGE_TYPE_Text; {S/W}
end;
wiaParams.SetItemProperty(WIA_IPS_Cur_Intent, Val);

case color of
1: Val:=WIA_DATA_GRAYSCALE;{Grau}
2: Val:=WIA_DATA_COLOR; {Farbe}
else Val:=WIA_DATA_THRESHOLD;{S/W}
end;
wiaParams.SetItemProperty(WIA_IPA_DATATYPE, Val);

can set the Color!

Go to Top of Page

xequte

38610 Posts

Posted - Apr 04 2017 :  16:47:16  Show Profile  Reply
Hi Ralf

Do you need to set both of these properties?

What is the make and model of the scanner?


Nigel
Xequte Software
www.xequte.com
nigel@xequte.com
Go to Top of Page

Ralf

120 Posts

Posted - Apr 05 2017 :  00:34:47  Show Profile  Reply
Hi Nigel,
at the moment i didn't know any scanner your version did work.
We tested with Brother ADS 2400N, Fujitsu fi-6110, OKI 873.
I can test later on in office in about 2 houers it we need both or for example the first is enough to get the correct result.
Regards
Ralf
Go to Top of Page

Ralf

120 Posts

Posted - Apr 05 2017 :  02:25:28  Show Profile  Reply
Hi Nigel,
i tried only setting the first parameter

case color of
1: Val:=WIA_INTENT_IMAGE_TYPE_GRAYSCALE;{Grau}
2: Val:=WIA_INTENT_IMAGE_TYPE_COLOR; {Farbe}
else Val:=WIA_INTENT_IMAGE_TYPE_Text; {S/W}
end;
wiaParams.SetItemProperty(WIA_IPS_Cur_Intent, Val);

and the setting of the color works.

Witch more information to the used scanner do you want to know?
Regards
Ralf
Go to Top of Page

Ralf

120 Posts

Posted - Apr 05 2017 :  03:38:40  Show Profile  Reply
Hi Nigel,
i'm at the moment looking in your source code to find what is different to my code.
By looking inside the AllAcqure Demo i found, that you save the new Properties befor you do the Acquire (inside the btnAcquire). In the "Save Parameters" Button you do also, after the saving, a "UpdateControlStatus".
That is the reason why i didn't see, that the changing of Color didn't work and it was set back to the old value. Maybe you implement in your demo for the Acquire Button also an Update.
Best Regards
Ralf
Go to Top of Page

xequte

38610 Posts

Posted - Apr 30 2017 :  18:48:38  Show Profile  Reply
Hi Ralf

Sorry, are you saying it fails when using the Acquire demo?

Nigel
Xequte Software
www.xequte.com
nigel@xequte.com
Go to Top of Page

Ralf

120 Posts

Posted - May 01 2017 :  11:13:35  Show Profile  Reply
Hi Nigel,

setting the Color this way work:
case color of
1: Val:=WIA_INTENT_IMAGE_TYPE_GRAYSCALE;{Grau}
2: Val:=WIA_INTENT_IMAGE_TYPE_COLOR; {Farbe}
else Val:=WIA_INTENT_IMAGE_TYPE_Text; {S/W}
end;
wiaParams.SetItemProperty(WIA_IPS_Cur_Intent, Val);

You should implement that way for setting the Color of the Scan in your Demo.

Best Regards

Ralf
Go to Top of Page

xequte

38610 Posts

Posted - May 01 2017 :  17:29:29  Show Profile  Reply
Hi Ralf

So does it work if you change iexAcquire.pas as follows:

procedure TIEAcquireParams.SetPixelType(v : TIEAcquirePixelType);
var
  iBitsPerChannel: Integer;
begin
  case SelectedSourceApi of
    ieaTwain  : begin
                  iBitsPerChannel := -1;
                  case v of
                    ieapMonochrome    : begin
                                          fTwainParams.PixelType.CurrentValue := Twain_PixelType_BW;
                                        end;
                    ieap8BitGrayScale : begin
                                          fTwainParams.PixelType.CurrentValue := Twain_PixelType_Grayscale;
                                          iBitsPerChannel  := 8;
                                        end;
                    ieap16BitGrayScale : begin
                                          fTwainParams.PixelType.CurrentValue := Twain_PixelType_Grayscale;
                                          iBitsPerChannel  := 16;
                                        end;
                    ieapFullColor     : begin
                                          fTwainParams.PixelType.CurrentValue := Twain_PixelType_FullRGB;
                                          // Note: Some manufaturers incorrectly treat full color images as BitDepth of 24
                                          if ScannerTreatsBitDepthAsPerChannel then
                                            iBitsPerChannel  := 8
                                          else
                                            iBitsPerChannel  := 24;
                                        end;
                    ieapFullColor16   : begin
                                          fTwainParams.PixelType.CurrentValue := Twain_PixelType_FullRGB;
                                          if ScannerTreatsBitDepthAsPerChannel then
                                            iBitsPerChannel  := 16
                                          else
                                            iBitsPerChannel  := 48;
                                        end;
                    ieapOther         : begin { Ignore } end;
                  end;

                  if ( iBitsPerChannel > -1 ) and
                     ( fTwainParams.BitDepth.IndexOf( iBitsPerChannel ) >= 0 ) then
                    fTwainParams.BitDepth.CurrentValue := iBitsPerChannel;
                end;
    ieaWIA    : case v of
                  ieapMonochrome    : begin
                                        fWiaParams.SetItemProperty(WIA_IPA_BITS_PER_CHANNEL, 1);
                                        fWiaParams.SetItemProperty(WIA_IPA_CHANNELS_PER_PIXEL, 1);
                                        fWiaParams.SetItemProperty(WIA_IPS_CUR_INTENT, WIA_INTENT_IMAGE_TYPE_GRAYSCALE);
                                      end;
                  ieap8BitGrayScale : begin
                                        fWiaParams.SetItemProperty(WIA_IPA_BITS_PER_CHANNEL, 8);
                                        fWiaParams.SetItemProperty(WIA_IPA_CHANNELS_PER_PIXEL, 1);
                                        fWiaParams.SetItemProperty(WIA_IPS_CUR_INTENT, WIA_INTENT_IMAGE_TYPE_GRAYSCALE);
                                      end;
                  ieap16BitGrayScale : begin
                                        fWiaParams.SetItemProperty(WIA_IPA_BITS_PER_CHANNEL, 16);
                                        fWiaParams.SetItemProperty(WIA_IPA_CHANNELS_PER_PIXEL, 1);
                                        fWiaParams.SetItemProperty(WIA_IPS_CUR_INTENT, WIA_INTENT_IMAGE_TYPE_GRAYSCALE);
                                      end;
                  ieapFullColor     : begin
                                        fWiaParams.SetItemProperty(WIA_IPA_BITS_PER_CHANNEL, 8);
                                        fWiaParams.SetItemProperty(WIA_IPA_CHANNELS_PER_PIXEL, 3);
                                        fWiaParams.SetItemProperty(WIA_IPS_CUR_INTENT, WIA_INTENT_IMAGE_TYPE_COLOR);
                                      end;
                  ieapFullColor16   : begin
                                        fWiaParams.SetItemProperty(WIA_IPA_BITS_PER_CHANNEL, 16);
                                        fWiaParams.SetItemProperty(WIA_IPA_CHANNELS_PER_PIXEL, 3);
                                        fWiaParams.SetItemProperty(WIA_IPS_CUR_INTENT, WIA_INTENT_IMAGE_TYPE_COLOR);
                                      end;
                  ieapOther         : begin { Ignore } end;
                end;
    { ieaDCIM : N/A }
  end;
end;



Nigel
Xequte Software
www.xequte.com
nigel@xequte.com
Go to Top of Page

Ralf

120 Posts

Posted - May 02 2017 :  02:15:52  Show Profile  Reply
Hi Nigel,

i tried your changes. Is there a reason why you also use WIA_Intent_Image_Type Grayscale by black and white and not for example WIA_INTENT_IMAGE_TYPE_Text.

When i scan a A4 Testpage with Twain Black and White the page has 22 kb.

When i do the same with WIA

Black and White WIA_INTENT_IMAGE_TYPE_Text 17 kb
Black and White WIA_INTENT_IMAGE_TYPE_GRAYSCALE 137 kb
Gray WIA_INTENT_IMAGE_TYPE_GRAYSCALE 210 kb

The quality of Twain Black and White is better then the Quality of WIA (as WIA_INTENT_IMAGE_TYPE_Text).

Maybe I can get a better result if i have a look on WIA_DATA_Threshold.

Ralf
Go to Top of Page

xequte

38610 Posts

Posted - May 02 2017 :  19:47:02  Show Profile  Reply
Hi Ralf

According to the Microsoft documentation, WIA_INTENT_IMAGE_TYPE_TEXT is intended only when text is being scanned, so using it in a non-standard way (to denote monochrome) may cause inconsistent results across devices/drivers.

Nigel
Xequte Software
www.xequte.com
nigel@xequte.com
Go to Top of Page

Ralf

120 Posts

Posted - May 03 2017 :  02:17:17  Show Profile  Reply
Hi Nigel,

thanks for your Feedback. The Quality using WIA_INTENT_IMAGE_TYPE_TEXT is not so good as using .._TYPE_GRAYSCALE. The size of the resulting image using Grayscale is much bigger.
The Size of ...TYPE_Text is nearly the same as scanning Black and White over Twain.
We will see what we use for scanning.

Ralf
Go to Top of Page
  Previous Topic Topic Next Topic  
 New Topic  Reply to Topic
Jump To: