kopia lustrzana https://gitlab.com/sane-project/backends
Remove dead "auto level" code, sanitize key handling.
rodzic
e7c44fe679
commit
76a23c3bc4
|
@ -973,7 +973,6 @@ static SANE_Bool
|
||||||
GetKeyStatus (SANE_Byte * pKey)
|
GetKeyStatus (SANE_Byte * pKey)
|
||||||
{
|
{
|
||||||
SANE_Byte pKeyTemp = 0x00;
|
SANE_Byte pKeyTemp = 0x00;
|
||||||
STATUS status = Asic_CheckFunctionKey (&g_chip, &pKeyTemp);
|
|
||||||
DBG (DBG_FUNC, "GetKeyStatus: start\n");
|
DBG (DBG_FUNC, "GetKeyStatus: start\n");
|
||||||
|
|
||||||
if (STATUS_GOOD != Asic_Open (&g_chip))
|
if (STATUS_GOOD != Asic_Open (&g_chip))
|
||||||
|
@ -982,33 +981,22 @@ GetKeyStatus (SANE_Byte * pKey)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (STATUS_GOOD != status)
|
if (STATUS_GOOD != Asic_CheckFunctionKey (&g_chip, &pKeyTemp))
|
||||||
{
|
{
|
||||||
DBG (DBG_ERR, "GetKeyStatus: Asic_CheckFunctionKey is fail\n");
|
DBG (DBG_ERR, "GetKeyStatus: Asic_CheckFunctionKey is fail\n");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (0x01 == pKeyTemp)
|
if (0x01 == pKeyTemp)
|
||||||
{
|
*pKey = 0x01; /* Scan key pressed */
|
||||||
*pKey = 0x01; /*Scan key pressed */
|
else if (0x02 == pKeyTemp)
|
||||||
}
|
*pKey = 0x02; /* Copy key pressed */
|
||||||
|
else if (0x04 == pKeyTemp)
|
||||||
if (0x02 == pKeyTemp)
|
*pKey = 0x03; /* Fax key pressed */
|
||||||
{
|
else if (0x08 == pKeyTemp)
|
||||||
*pKey = 0x02; /*Copy key pressed */
|
*pKey = 0x04; /* Email key pressed */
|
||||||
}
|
else if (0x10 == pKeyTemp)
|
||||||
if (0x04 == pKeyTemp)
|
*pKey = 0x05; /* Panel key pressed */
|
||||||
{
|
|
||||||
*pKey = 0x03; /*Fax key pressed */
|
|
||||||
}
|
|
||||||
if (0x08 == pKeyTemp)
|
|
||||||
{
|
|
||||||
*pKey = 0x04; /*Email key pressed */
|
|
||||||
}
|
|
||||||
if (0x10 == pKeyTemp)
|
|
||||||
{
|
|
||||||
*pKey = 0x05; /*Panel key pressed */
|
|
||||||
}
|
|
||||||
|
|
||||||
if (STATUS_GOOD != Asic_Close (&g_chip))
|
if (STATUS_GOOD != Asic_Close (&g_chip))
|
||||||
{
|
{
|
||||||
|
@ -1020,6 +1008,7 @@ GetKeyStatus (SANE_Byte * pKey)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
Deal with the image with auto level
|
Deal with the image with auto level
|
||||||
Parameters:
|
Parameters:
|
||||||
|
@ -1273,505 +1262,6 @@ AutoLevel (SANE_Byte *lpSource, COLORMODE colorMode, unsigned short ScanLines,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef SANE_UNUSED
|
|
||||||
/**********************************************************************
|
|
||||||
Deal with image with auto level
|
|
||||||
Parameters:
|
|
||||||
pDIB: the data of image
|
|
||||||
ImageWidth: the width of image
|
|
||||||
ImageHeight: the height of image
|
|
||||||
***********************************************************************/
|
|
||||||
static void
|
|
||||||
QBETDetectAutoLevel (void *pDIB, unsigned int ImageWidth, unsigned int ImageHeight)
|
|
||||||
{
|
|
||||||
unsigned short *pbmpdata;
|
|
||||||
float fRPercent = 0.0;
|
|
||||||
float fGPercent = 0.0;
|
|
||||||
float fBPercent = 0.0;
|
|
||||||
float fRSum, fGSum, fBSum;
|
|
||||||
|
|
||||||
int i, j;
|
|
||||||
unsigned int tLines, CountPixels, TotalImgSize;
|
|
||||||
unsigned short R, G, B, max_R, max_G, max_B, min_R, min_G, min_B;
|
|
||||||
unsigned short wIndexR, wIndexG, wIndexB;
|
|
||||||
float fmax_R, fmax_G, fmax_B;
|
|
||||||
unsigned int sum_R = 0, sum_G = 0, sum_B = 0;
|
|
||||||
unsigned int hisgram_R[1024], hisgram_G[1024], hisgram_B[1024];
|
|
||||||
|
|
||||||
if (!pDIB)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
pbmpdata = (unsigned short *) pDIB;
|
|
||||||
|
|
||||||
CountPixels = 0;
|
|
||||||
TotalImgSize = ImageWidth * ImageHeight;
|
|
||||||
|
|
||||||
|
|
||||||
for (i = 0; i < 1024; i++)
|
|
||||||
{
|
|
||||||
|
|
||||||
hisgram_R[i] = 0;
|
|
||||||
hisgram_G[i] = 0;
|
|
||||||
hisgram_B[i] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*Find min , max, mean */
|
|
||||||
max_R = max_G = max_B = 0;
|
|
||||||
min_R = min_G = min_B = 1023;
|
|
||||||
tLines = 0;
|
|
||||||
|
|
||||||
for (j = 0; j < (int) ImageHeight; j++)
|
|
||||||
{
|
|
||||||
tLines = j * ImageWidth * 3;
|
|
||||||
for (i = 0; i < (int) ImageWidth; i++)
|
|
||||||
{
|
|
||||||
R = *(pbmpdata + (tLines + i * 3 + 2));
|
|
||||||
G = *(pbmpdata + (tLines + i * 3 + 1));
|
|
||||||
B = *(pbmpdata + (tLines + i * 3));
|
|
||||||
|
|
||||||
max_R = _MAX (R, max_R);
|
|
||||||
max_G = _MAX (G, max_G);
|
|
||||||
max_B = _MAX (B, max_B);
|
|
||||||
|
|
||||||
min_R = _MIN (R, min_R);
|
|
||||||
min_G = _MIN (G, min_G);
|
|
||||||
min_B = _MIN (B, min_B);
|
|
||||||
|
|
||||||
hisgram_R[R]++;
|
|
||||||
hisgram_G[G]++;
|
|
||||||
hisgram_B[B]++;
|
|
||||||
|
|
||||||
sum_R += R;
|
|
||||||
sum_G += G;
|
|
||||||
sum_B += B;
|
|
||||||
|
|
||||||
*(pbmpdata + (tLines + i * 3 + 2)) = R;
|
|
||||||
*(pbmpdata + (tLines + i * 3 + 1)) = G;
|
|
||||||
*(pbmpdata + (tLines + i * 3)) = B;
|
|
||||||
|
|
||||||
CountPixels++;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
fRSum = 0.0;
|
|
||||||
fGSum = 0.0;
|
|
||||||
fBSum = 0.0;
|
|
||||||
|
|
||||||
wIndexR = 511;
|
|
||||||
wIndexG = 511;
|
|
||||||
wIndexB = 511;
|
|
||||||
|
|
||||||
for (i = 0; i < 1024; i++)
|
|
||||||
{
|
|
||||||
fRSum += (float) hisgram_R[i];
|
|
||||||
fRPercent = (fRSum / CountPixels) * 100;
|
|
||||||
if (fRPercent > 50)
|
|
||||||
{
|
|
||||||
wIndexR = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < 1024; i++)
|
|
||||||
{
|
|
||||||
fGSum += (float) hisgram_G[i];
|
|
||||||
fGPercent = (fGSum / CountPixels) * 100;
|
|
||||||
if (fGPercent > 50)
|
|
||||||
{
|
|
||||||
wIndexG = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < 1024; i++)
|
|
||||||
{
|
|
||||||
fBSum += (float) hisgram_B[i];
|
|
||||||
fBPercent = (fBSum / CountPixels) * 100;
|
|
||||||
if (fBPercent > 50)
|
|
||||||
{
|
|
||||||
wIndexB = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
fRSum = 0.0;
|
|
||||||
|
|
||||||
for (i = wIndexR; i >= 0; i--)
|
|
||||||
{
|
|
||||||
fRSum += (float) hisgram_R[i];
|
|
||||||
fRPercent = (fRSum / CountPixels) * 100;
|
|
||||||
if (fRPercent >= 48)
|
|
||||||
{
|
|
||||||
min_R = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
fRSum = 0.0;
|
|
||||||
for (i = wIndexR; i < 1024; i++)
|
|
||||||
{
|
|
||||||
fRSum += (float) hisgram_R[i];
|
|
||||||
fRPercent = (fRSum / CountPixels) * 100;
|
|
||||||
if (fRPercent >= 47)
|
|
||||||
{
|
|
||||||
max_R = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
fGSum = 0.0;
|
|
||||||
for (i = wIndexG; i >= 0; i--)
|
|
||||||
{
|
|
||||||
fGSum += (float) hisgram_G[i];
|
|
||||||
fGPercent = (fGSum / CountPixels) * 100;
|
|
||||||
if (fGPercent >= 48)
|
|
||||||
{
|
|
||||||
min_G = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
fGSum = 0.0;
|
|
||||||
for (i = wIndexG; i < 1024; i++)
|
|
||||||
{
|
|
||||||
fGSum += (float) hisgram_G[i];
|
|
||||||
fGPercent = (fGSum / CountPixels) * 100;
|
|
||||||
if (fGPercent >= 47)
|
|
||||||
{
|
|
||||||
max_G = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
fBSum = 0.0;
|
|
||||||
for (i = wIndexB; i >= 0; i--)
|
|
||||||
{
|
|
||||||
fBSum += (float) hisgram_B[i];
|
|
||||||
fBPercent = (fBSum / CountPixels) * 100;
|
|
||||||
if (fBPercent >= 46)
|
|
||||||
{
|
|
||||||
min_B = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
fBSum = 0.0;
|
|
||||||
for (i = wIndexB; i < 1024; i++)
|
|
||||||
{
|
|
||||||
fBSum += (float) hisgram_B[i];
|
|
||||||
fBPercent = (fBSum / CountPixels) * 100;
|
|
||||||
if (fBPercent >= 47)
|
|
||||||
{
|
|
||||||
max_B = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*Autolevel: */
|
|
||||||
sum_R = max_R - min_R;
|
|
||||||
sum_G = max_G - min_G;
|
|
||||||
sum_B = max_B - min_B;
|
|
||||||
|
|
||||||
for (j = 0; j < (int) ImageHeight; j++)
|
|
||||||
{
|
|
||||||
tLines = j * ImageWidth * 3;
|
|
||||||
for (i = 0; i < (int) ImageWidth; i++)
|
|
||||||
{
|
|
||||||
R = *(pbmpdata + (tLines + i * 3 + 2));
|
|
||||||
G = *(pbmpdata + (tLines + i * 3 + 1));
|
|
||||||
B = *(pbmpdata + (tLines + i * 3));
|
|
||||||
|
|
||||||
|
|
||||||
/*R*/ if (sum_R == 0)
|
|
||||||
R = max_R;
|
|
||||||
else if (R < min_R)
|
|
||||||
{
|
|
||||||
|
|
||||||
R = 0;
|
|
||||||
}
|
|
||||||
else if ((R >= min_R) && (R <= 1023))
|
|
||||||
{
|
|
||||||
fmax_R = ((float) ((R - min_R) * 923) / (float) sum_R) + 100;
|
|
||||||
R = (unsigned short) fmax_R;
|
|
||||||
fmax_R = (fmax_R - R) * 10;
|
|
||||||
if (fmax_R >= 5)
|
|
||||||
R++;
|
|
||||||
}
|
|
||||||
if (R > 1023)
|
|
||||||
R = 1023;
|
|
||||||
|
|
||||||
/*G*/ if (sum_G == 0)
|
|
||||||
G = max_G;
|
|
||||||
else if (G < min_G)
|
|
||||||
{
|
|
||||||
|
|
||||||
G = 0;
|
|
||||||
}
|
|
||||||
else if ((G >= min_G) && (G <= 1023))
|
|
||||||
{
|
|
||||||
fmax_G = ((float) ((G - min_G) * 923) / (float) sum_G) + 100;
|
|
||||||
G = (unsigned short) fmax_G;
|
|
||||||
fmax_G = (fmax_G - G) * 10;
|
|
||||||
if (fmax_G >= 5)
|
|
||||||
G++;
|
|
||||||
}
|
|
||||||
if (G > 1023)
|
|
||||||
G = 1023;
|
|
||||||
|
|
||||||
/*B*/ if (sum_B == 0)
|
|
||||||
B = max_B;
|
|
||||||
else if (B < min_R)
|
|
||||||
{
|
|
||||||
|
|
||||||
B = 0;
|
|
||||||
}
|
|
||||||
else if ((B >= min_B) && (R <= 1023))
|
|
||||||
{
|
|
||||||
fmax_B = ((float) (B - min_B) * 923 / (float) sum_B) + 100;
|
|
||||||
|
|
||||||
B = (unsigned short) fmax_B;
|
|
||||||
fmax_B = (fmax_B - B) * 10;
|
|
||||||
if (fmax_B >= 5)
|
|
||||||
B++;
|
|
||||||
}
|
|
||||||
if (B > 1023)
|
|
||||||
B = 1023;
|
|
||||||
|
|
||||||
*(pbmpdata + (tLines + i * 3 + 2)) = R;
|
|
||||||
*(pbmpdata + (tLines + i * 3 + 1)) = G;
|
|
||||||
*(pbmpdata + (tLines + i * 3)) = B;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef SANE_UNUSED
|
|
||||||
/**********************************************************************
|
|
||||||
Change the image data and deal with auto level
|
|
||||||
Parameters:
|
|
||||||
lpSource: the data of image
|
|
||||||
colorMode: the color mode
|
|
||||||
ScanLines: the rows of image
|
|
||||||
BytesPerLine: the bytes of per line
|
|
||||||
***********************************************************************/
|
|
||||||
static void
|
|
||||||
QBetChange (SANE_Byte *lpSource, COLORMODE colorMode, unsigned short ScanLines,
|
|
||||||
unsigned int BytesPerLine)
|
|
||||||
{
|
|
||||||
unsigned short i, j;
|
|
||||||
unsigned int tLines, TotalImgSize;
|
|
||||||
unsigned short R1, G1, B1, R, G, B, R2, G2, B2, QBET_RGB = 0, PointF, PointB;
|
|
||||||
unsigned short *pwRGB;
|
|
||||||
|
|
||||||
int k;
|
|
||||||
|
|
||||||
unsigned int ImageWidth = BytesPerLine / 3;
|
|
||||||
unsigned int ImageHeight = ScanLines;
|
|
||||||
SANE_Byte *pbmpdata = (SANE_Byte *) lpSource;
|
|
||||||
|
|
||||||
if (colorMode != CM_RGB24ext)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
TotalImgSize = ImageWidth * ImageHeight * 3 * 2;
|
|
||||||
if ((pwRGB = (unsigned short *) malloc (TotalImgSize)) == NULL)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
for (j = 0; j < ImageHeight; j++)
|
|
||||||
{
|
|
||||||
tLines = j * ImageWidth * 3;
|
|
||||||
for (i = 0; i < ImageWidth; i++)
|
|
||||||
{
|
|
||||||
if (i == 0)
|
|
||||||
{
|
|
||||||
R1 = R = (unsigned short) (SANE_Byte) * (pbmpdata + (tLines + i * 3 + 2));
|
|
||||||
G1 = G = (unsigned short) (SANE_Byte) * (pbmpdata + (tLines + i * 3 + 1));
|
|
||||||
B1 = B = (unsigned short) (SANE_Byte) * (pbmpdata + (tLines + i * 3));
|
|
||||||
R2 = (unsigned short) (SANE_Byte) * (pbmpdata + (tLines + (i + 1) * 3 + 2));
|
|
||||||
G2 = (unsigned short) (SANE_Byte) * (pbmpdata + (tLines + (i + 1) * 3 + 1));
|
|
||||||
B2 = (unsigned short) (SANE_Byte) * (pbmpdata + (tLines + (i + 1) * 3));
|
|
||||||
}
|
|
||||||
else if (i == (ImageWidth - 1))
|
|
||||||
{
|
|
||||||
R1 = (unsigned short) (SANE_Byte) * (pbmpdata + (tLines + (i - 1) * 3 + 2));
|
|
||||||
G1 = (unsigned short) (SANE_Byte) * (pbmpdata + (tLines + (i - 1) * 3 + 1));
|
|
||||||
B1 = (unsigned short) (SANE_Byte) * (pbmpdata + (tLines + (i - 1) * 3));
|
|
||||||
R2 = R = (unsigned short) (SANE_Byte) * (pbmpdata + (tLines + i * 3 + 2));
|
|
||||||
G2 = G = (unsigned short) (SANE_Byte) * (pbmpdata + (tLines + i * 3 + 1));
|
|
||||||
B2 = B = (unsigned short) (SANE_Byte) * (pbmpdata + (tLines + i * 3));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
R1 = (unsigned short) (SANE_Byte) * (pbmpdata + (tLines + (i - 1) * 3 + 2));
|
|
||||||
G1 = (unsigned short) (SANE_Byte) * (pbmpdata + (tLines + (i - 1) * 3 + 1));
|
|
||||||
B1 = (unsigned short) (SANE_Byte) * (pbmpdata + (tLines + (i - 1) * 3));
|
|
||||||
|
|
||||||
R = (unsigned short) (SANE_Byte) * (pbmpdata + (tLines + i * 3 + 2));
|
|
||||||
G = (unsigned short) (SANE_Byte) * (pbmpdata + (tLines + i * 3 + 1));
|
|
||||||
B = (unsigned short) (SANE_Byte) * (pbmpdata + (tLines + i * 3));
|
|
||||||
|
|
||||||
R2 = (unsigned short) (SANE_Byte) * (pbmpdata + (tLines + (i + 1) * 3 + 2));
|
|
||||||
G2 = (unsigned short) (SANE_Byte) * (pbmpdata + (tLines + (i + 1) * 3 + 1));
|
|
||||||
B2 = (unsigned short) (SANE_Byte) * (pbmpdata + (tLines + (i + 1) * 3));
|
|
||||||
}
|
|
||||||
|
|
||||||
R1 = R1 & 0x0003;
|
|
||||||
G1 = G1 & 0x0003;
|
|
||||||
B1 = B1 & 0x0003;
|
|
||||||
|
|
||||||
R2 = R2 & 0x0003;
|
|
||||||
G2 = G2 & 0x0003;
|
|
||||||
B2 = B2 & 0x0003;
|
|
||||||
for (k = 0; k < 3; k++)
|
|
||||||
{
|
|
||||||
if (k == 0)
|
|
||||||
{
|
|
||||||
PointF = R1;
|
|
||||||
PointB = R2;
|
|
||||||
}
|
|
||||||
else if (k == 1)
|
|
||||||
{
|
|
||||||
PointF = G1;
|
|
||||||
PointB = G2;
|
|
||||||
}
|
|
||||||
else if (k == 2)
|
|
||||||
{
|
|
||||||
PointF = B1;
|
|
||||||
PointB = B2;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (PointF)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
case 1:
|
|
||||||
if (PointB == 0)
|
|
||||||
QBET_RGB = 0xFFFC;
|
|
||||||
else if (PointB == 1)
|
|
||||||
QBET_RGB = 0xFFFC;
|
|
||||||
else if (PointB == 2)
|
|
||||||
QBET_RGB = 0xFFFD;
|
|
||||||
else if (PointB == 3)
|
|
||||||
QBET_RGB = 0xFFFE;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
if (PointB == 0)
|
|
||||||
QBET_RGB = 0xFFFD;
|
|
||||||
else if (PointB == 1)
|
|
||||||
QBET_RGB = 0xFFFD;
|
|
||||||
else if (PointB == 2)
|
|
||||||
QBET_RGB = 0xFFFF;
|
|
||||||
else if (PointB == 3)
|
|
||||||
QBET_RGB = 0xFFFF;
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
if (PointB == 0)
|
|
||||||
QBET_RGB = 0xFFFE;
|
|
||||||
else if (PointB == 1)
|
|
||||||
QBET_RGB = 0xFFFE;
|
|
||||||
else if (PointB == 2)
|
|
||||||
QBET_RGB = 0xFFFF;
|
|
||||||
else if (PointB == 3)
|
|
||||||
QBET_RGB = 0xFFFF;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (k == 0)
|
|
||||||
{
|
|
||||||
R = R << 2;
|
|
||||||
R = R + 0x0003;
|
|
||||||
R = R & QBET_RGB;
|
|
||||||
}
|
|
||||||
else if (k == 1)
|
|
||||||
{
|
|
||||||
G = G << 2;
|
|
||||||
G = G + 0x0003;
|
|
||||||
G = G & QBET_RGB;
|
|
||||||
}
|
|
||||||
else if (k == 2)
|
|
||||||
{
|
|
||||||
B = B << 2;
|
|
||||||
B = B + 0x0003;
|
|
||||||
B = B & QBET_RGB;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
*(pwRGB + (tLines + i * 3 + 2)) = R;
|
|
||||||
*(pwRGB + (tLines + i * 3 + 1)) = G;
|
|
||||||
*(pwRGB + (tLines + i * 3)) = B;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
QBETDetectAutoLevel (pwRGB, ImageWidth, ImageHeight);
|
|
||||||
|
|
||||||
|
|
||||||
for (j = 0; j < ImageHeight; j++)
|
|
||||||
{
|
|
||||||
tLines = j * ImageWidth * 3;
|
|
||||||
|
|
||||||
for (i = 0; i < ImageWidth; i++)
|
|
||||||
{
|
|
||||||
R = *(pwRGB + (tLines + i * 3 + 2));
|
|
||||||
G = *(pwRGB + (tLines + i * 3 + 1));
|
|
||||||
B = *(pwRGB + (tLines + i * 3));
|
|
||||||
|
|
||||||
R = R >> 2;
|
|
||||||
G = G >> 2;
|
|
||||||
|
|
||||||
B = B >> 2;
|
|
||||||
if (R > 255)
|
|
||||||
R = 255;
|
|
||||||
if (G > 255)
|
|
||||||
G = 255;
|
|
||||||
if (B > 255)
|
|
||||||
B = 255;
|
|
||||||
|
|
||||||
*(pbmpdata + (tLines + i * 3 + 2)) = (SANE_Byte) R;
|
|
||||||
*(pbmpdata + (tLines + i * 3 + 1)) = (SANE_Byte) G;
|
|
||||||
*(pbmpdata + (tLines + i * 3)) = (SANE_Byte) B;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (pwRGB != NULL)
|
|
||||||
{
|
|
||||||
free (pwRGB);
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/****************************** SANE API functions *****************************/
|
/****************************** SANE API functions *****************************/
|
||||||
|
|
||||||
|
|
|
@ -3974,13 +3974,13 @@ Asic_CheckFunctionKey (PAsic chip, SANE_Byte * key)
|
||||||
|
|
||||||
if (((0xff - bBuffer_1) & 0x10) == 0x10)
|
if (((0xff - bBuffer_1) & 0x10) == 0x10)
|
||||||
*key = 0x01;
|
*key = 0x01;
|
||||||
if (((0xff - bBuffer_1) & 0x01) == 0x01)
|
else if (((0xff - bBuffer_1) & 0x01) == 0x01)
|
||||||
*key = 0x02;
|
*key = 0x02;
|
||||||
if (((0xff - bBuffer_1) & 0x04) == 0x04)
|
else if (((0xff - bBuffer_1) & 0x04) == 0x04)
|
||||||
*key = 0x04;
|
*key = 0x04;
|
||||||
if (((0xff - bBuffer_2) & 0x08) == 0x08)
|
else if (((0xff - bBuffer_2) & 0x08) == 0x08)
|
||||||
*key = 0x08;
|
*key = 0x08;
|
||||||
if (((0xff - bBuffer_1) & 0x02) == 0x02)
|
else if (((0xff - bBuffer_1) & 0x02) == 0x02)
|
||||||
*key = 0x10;
|
*key = 0x10;
|
||||||
|
|
||||||
DBG (DBG_ASIC, "CheckFunctionKey=%d\n", *key);
|
DBG (DBG_ASIC, "CheckFunctionKey=%d\n", *key);
|
||||||
|
|
Ładowanie…
Reference in New Issue