再附上两种处理原代码: 先是VC的 BYTE RGB[3] = {0}, YCbCr[3] = {0}; DOUBLE dbHSV[3] = {0}, dbStdRGB[3] = {0}, dbStdYCbCr[3] = {0}; PWBRESULTTYPE pResult = &(pResultInfo->WBResult); DWORD dwBlockSize = pResultInfo->Setting.dwBlockSize; DWORD dwPicture = pResultInfo->DocInfo.BmpInfo.bmiHeader.biWidth; DWORD dwDataSize = GETPICTUREWIDTH(dwPicture); DWORD dwHeight = pResultInfo->DocInfo.BmpInfo.bmiHeader.biHeight; CRect rect; rect.top = pResultInfo->Setting.ptArray.x; rect.left = pResultInfo->Setting.ptArray.x; rect.bottom = rect.top + dwBlockSize; rect.right = rect.left + dwBlockSize; // calcult mean RGB and standard RGB CalculateRGB(pResultInfo->DocInfo.BmpInfo, pResultInfo->DocInfo.lpFileData, rect, RGB); pResult->Blue = RGB[2]; pResult->Green = RGB[1]; pResult->Red = RGB[0]; // calculate YCbCr and standard luminance CalculateYCbCr(pResultInfo->DocInfo.BmpInfo, pResultInfo->DocInfo.lpFileData, rect, YCbCr); pResult->Luminance = YCbCr[0]; pResult->dbRG = (RGB[0]*1.0)/RGB[1]; pResult->dbGG = 1; pResult->dbBG = (RGB[2]*1.0)/RGB[1]; 再是VB的。 Public Function AutoColorPoise(mBitmap As cDIB, AutoInfo As Label) As Boolean Dim i As Long, j As Long Dim JumpLines As Long, JumpBits As Long, StepLines As Long, StepBits As Long Dim MeanColor(0 To 2) As Single, SumColor(0 To 2) As Long, Bits As Long, GreyColor As Long Dim RedTable(0 To 255) As Long, GreenTable(0 To 255) As Long, BlueTable(0 To 255) As Long Dim RedValue As Long, GreenValue As Long, BlueValue As Long Dim dWidth As Long, dHeight As Long, Scanline As Long, SizeImage As Long Dim dPtr As Long dWidth = mBitmap.mWidth - 1: dHeight = mBitmap.mHeight - 1 SizeImage = mBitmap.SizeImage Scanline = mBitmap.Scanline dPtr = mBitmap.ImagePtr JumpLines = Int(dHeight / 1500) * Scanline StepLines = Int(dHeight / 1500) + 1 JumpBits = Int(dWidth / 1500) * 4 + 4 StepBits = Int(dWidth / 1500) + 1 p4Byte0Ptr(0) = dPtr For i = 0 To dHeight Step StepLines For j = 0 To dWidth Step StepBits SumColor(0) = SumColor(0) + p4Byte0(0) SumColor(1) = SumColor(1) + p4Byte0(1) SumColor(2) = SumColor(2) + p4Byte0(2) Bits = Bits + 1 p4Byte0Ptr(0) = p4Byte0Ptr(0) + JumpBits Next j p4Byte0Ptr(0) = p4Byte0Ptr(0) + JumpLines Next i MeanColor(0) = SumColor(0) \ Bits MeanColor(1) = SumColor(1) \ Bits MeanColor(2) = SumColor(2) \ Bits GreyColor = (MeanColor(0) * 11 + MeanColor(1) * 59 + MeanColor(2) * 30) \ 100 BlueValue = GreyColor - MeanColor(0) GreenValue = GreyColor - MeanColor(1) RedValue = GreyColor - MeanColor(2) AutoInfo.Caption = "红色:" & CStr(RedValue) & " | 绿色:" & CStr(GreenValue) & " | 蓝色:" & CStr(BlueValue) For i = 0 To 255 RedTable(i) = i + RedValue If RedTable(i) > &HFF Then RedTable(i) = &HFF If RedTable(i) < &H0 Then RedTable(i) = &H0 GreenTable(i) = i + GreenValue If GreenTable(i) > &HFF Then GreenTable(i) = &HFF If GreenTable(i) < &H0 Then GreenTable(i) = &H0 BlueTable(i) = i + BlueValue If BlueTable(i) > &HFF Then BlueTable(i) = &HFF If BlueTable(i) < &H0 Then BlueTable(i) = &H0 Next i p4Byte0Ptr(0) = dPtr FrmMain.AutoPBar.Max = dHeight For i = 0 To dHeight For j = 0 To dWidth p4Byte0(0) = BlueTable(p4Byte0(0)) p4Byte0(1) = GreenTable(p4Byte0(1)) p4Byte0(2) = RedTable(p4Byte0(2)) p4Byte0Ptr(0) = p4Byte0Ptr(0) + 4 Next j FrmMain.AutoPBar.Value = i Next i FrmMain.AutoPBar.Max = 100: FrmMain.AutoPBar.Value = 100 AutoColorPoise = True End Function |
联系客服