문제

C++에서 TWAIN을 사용하고 있으며 사용자가 스캔 대화 상자에 표시되지 않고 대신 페이지가 설정된 기본값으로 스캔되어 저장되도록 DPI를 수동으로 설정하려고 합니다.DPI를 수동으로 설정해야 하는데 제대로 작동하지 않는 것 같습니다.ICAP_XRESOLUTION 및 ICAP_YRESOLUTION을 사용하여 기능 설정을 시도했습니다.이미지 정보를 보면 ICAP를 사용하여 설정한 것과 상관없이 항상 동일한 해상도가 표시됩니다.스캔한 이미지의 해상도를 설정하는 다른 방법이 있습니까? 아니면 문서 어디에서도 찾을 수 없는 추가 단계만 수행해야 합니까?

감사해요

도움이 되었습니까?

해결책

ICAP_XResolution과 ICAP_YRESULOTION을 사용하여 스캐너의 스캔 해상도를 설정하고 적어도 여러 HP 스캐너에서 작동합니다.

코드 스네이프 세트 :

float x_res = 1200;
cap.Cap = ICAP_XRESOLUTION;
cap.ConType = TWON_ONEVALUE;
cap.hContainer = GlobalAlloc(GHND, sizeof(TW_ONEVALUE));
if(cap.hContainer)
{
    val_p = (pTW_ONEVALUE)GlobalLock(cap.hContainer);
    val_p->ItemType = TWTY_FIX32;
    TW_FIX32 fix32_val = FloatToFIX32(x_res);
    val_p->Item = *((pTW_INT32) &fix32_val);
    GlobalUnlock(cap.hContainer);
    ret_code = SetCapability(cap);
    GlobalFree(cap.hContainer);
}

TW_FIX32 FloatToFIX32(float i_float)
{
    TW_FIX32 Fix32_value;
    TW_INT32 value = (TW_INT32) (i_float * 65536.0 + 0.5);
    Fix32_value.Whole = LOWORD(value >> 16);
    Fix32_value.Frac = LOWORD(value & 0x0000ffffL);
    return Fix32_value;
}

값은 Twain에 의해 정의 된 부동 소수점 형식 인 Tw_fix32 유형이어야합니다 (이상하지만 참).

나는 그것이 당신을 위해 효과가 있기를 바랍니다!

다른 팁

그런 식으로 작동해야합니다.

하지만 불행하게도 우리는 완벽한 세상에 살고 있지 않습니다.TWAIN 드라이버는 가장 버그가 많은 드라이버 중 하나입니다.대부분의 운전자가 TWAIN을 사용하여 스캐닝 프로세스를 제어하는 ​​것은 항상 큰 골치거리였습니다. 절대 스캔 대화 상자 없이 테스트되었습니다.

내가 아는 한, 두 대의 드라이버를 위한 테스트 스위트도 없기 때문에 각각은 조금씩 다르게 동작할 것입니다.

나는 90년대에 OCR 애플리케이션을 작성했고 이러한 문제도 처리해야 했습니다.결국 나는 지원되는 스캐너 목록과 스캐너 모듈을 갖게 되었습니다. 많이 각 드라이버에 대한 해킹 및 해결 방법.

예를 들어 ICAP_XRESOLUTION을 사용하십시오.TWAIN 문서에는 해상도를 32비트 부동 소수점으로 보내야 한다고 나와 있습니다.대신 정수를 사용하여 설정하려고 했습니까?또는 float로 보내지만 정수의 비트 표현을 float에 넣거나 그 반대의 경우도 마찬가지입니다.이 모든 것은 함께 일하는 운전자에게 효과적일 수 있습니다.아니면 전혀 작동하지 않을 수도 있습니다.

그 이후로 상황이 많이 바뀌었는지 의심스럽습니다.그러니 세상에 있는 기계의 적어도 절반에서 작동하게 되기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top