ImageCaptureCore错误-9933当ICScannerFunctionalUnit设置为以黑色&扫描时扫描白色

时间:2014-02-01 18:57:36

标签: objective-c macos cocoa image-capture scanning

我正在制作一个应用程序,可以轻松扫描到多页pdf文件。该项目位于GitHub,以防您想要查看所有项目代码。

我遇到黑白扫描问题。白。

这是按下按钮开始扫描时调用的方法。

- (IBAction)scan:(id)sender {
    //Get the selected scanner and it's functional unit
    ICScannerDevice *scanner = [self selectedScanner];
    ICScannerFunctionalUnit *unit = [scanner selectedFunctionalUnit];

    //If there is no scan or overviewscan in progress
    if (![unit overviewScanInProgress] && ![unit scanInProgress]) {
        //Setup the functional unit and start the scan
        [unit setScanArea:[self scanArea]];
        [unit setResolution:[[unit supportedResolutions] indexGreaterThanOrEqualToIndex:[[resolutionPopUpButton selectedItem] tag]]];
        [unit setBitDepth:ICScannerBitDepth8Bits];
        [unit setMeasurementUnit:ICScannerMeasurementUnitCentimeters];
        [unit setThresholdForBlackAndWhiteScanning:0];
        [unit setUsesThresholdForBlackAndWhiteScanning:YES];
        [unit setPixelDataType:[kindSegmentedControl selectedSegment]];
        [scanner requestScan];
    } else {
        //Cancel the ongoing scan
        [scanner cancelScan];
    }
}

我将pixelDataType设置为我从NSSegmentedControl得到的整数。选择第一个段时,这将返回0,这与ICScannerPixelDataTypeBW相同。

然而,尽管选择了第二个和第三个片段(ICScannerPixelDataTypeGrayICScannerPixelDataTypeRGB)时一切正常,但扫描器设置为扫描黑色&白。

ImageCaptureCore的扫描部分提供的文档非常少,但我发现这些属性描述了黑色&的阈值。 this website上的白色扫描,但它们都不适合我。

我知道这是ImageCaptureCore API的一部分,很多人并没有经常使用它,但我真的希望有人知道,或者至少可以找到解决问题的方法。

修改

我在我的实现中添加了- (void)device:(ICDevice *)device didEncounterError:(NSError *)error并记录了错误,即:

2014-02-01 21:55:16.260 Scanner[4131:903] Error Domain=com.apple.ImageCaptureCore Code=-9933 UserInfo=0x1005763f0 "An error occurred during scanning."

2 个答案:

答案 0 :(得分:3)

从另一个答案中略微提示(有意或无意),我自己想出了事情。

您需要做的是将bitDepth设置为ICScannerBitDepth1Bit,因为您尝试扫描的是每像素1位图像。

这反过来禁用灰度或rgb扫描。

由于我不能将赏金奖励给我自己的问题,我会将赏金奖励给我得到提示的问题。

答案 1 :(得分:2)

您可以在ICCommonConstants.h中找到ImageCaptureCore错误代码。

您提到的错误是

ICReturnReceivedUnsolicitedScannerErrorInfo   = -9933

也许你的扫描仪根本不支持Black&白色?由于灰度有效,你甚至想使用BW吗?

来自标题:

/*!
  @enum ICScannerPixelDataType
  @abstract Pixel data types. Corresponds to "ICAP_PIXELTYPE" of the TWAIN Specification.
  @constant ICScannerPixelDataTypeBW Monochrome 1 bit pixel image.
  @constant ICScannerPixelDataTypeGray 8 bit pixel Gray color space.
  @constant ICScannerPixelDataTypeRGB Color image RGB color space.
  @constant ICScannerPixelDataTypePalette Indexed Color image.
  @constant ICScannerPixelDataTypeCMY Color image in CMY color space.
  @constant ICScannerPixelDataTypeCMYK Color image in CMYK color space.
  @constant ICScannerPixelDataTypeYUV Color image in YUV color space.
  @constant ICScannerPixelDataTypeYUVK Color image in YUVK color space.
  @constant ICScannerPixelDataTypeCIEXYZ Color image in CIEXYZ color space.
*/

enum
{
    ICScannerPixelDataTypeBW      = 0,
    ICScannerPixelDataTypeGray    = 1,
    ICScannerPixelDataTypeRGB     = 2,
    ICScannerPixelDataTypePalette = 3,
    ICScannerPixelDataTypeCMY     = 4,
    ICScannerPixelDataTypeCMYK    = 5,
    ICScannerPixelDataTypeYUV     = 6,
    ICScannerPixelDataTypeYUVK    = 7,
    ICScannerPixelDataTypeCIEXYZ  = 8
};
typedef NSUInteger ICScannerPixelDataType;

你真的想支持每像素1位图像吗?