Ich werde nach und nach die meisten Algorithmen von da umsetzen!
AdvMame2x/3x
BlitzBasic: [AUSKLAPPEN] [EINKLAPPEN] Function AdvMame2x(InIMG) Local InIMGW = ImageWidth(InIMG), InIMGH = ImageHeight(InIMG) Local OutIMG = CreateImage(InIMGW*2, InIMGH*2) If OutIMG = 0 Then Return 0 Local InIMGB = ImageBuffer(InIMG), OutIMGB = ImageBuffer(OutIMG) LockBuffer InIMGB:LockBuffer OutIMGB Local PixelGrid[4], PixelGrid2[3] For X = 0 To InIMGW-1 For Y = 0 To InIMGH-1 PixelGrid[2] = ReadPixelFast(X,Y,InIMGB) If Y-1 > 0 Then PixelGrid[0] = ReadPixelFast(X,Y-1,InIMGB) Else PixelGrid[0] = PixelGrid[2] If X-1 > 0 Then PixelGrid[1] = ReadPixelFast(X-1,Y,InIMGB) Else PixelGrid[1] = PixelGrid[2] If X+1 < InIMGW Then PixelGrid[3] = ReadPixelFast(X+1,Y,InIMGB) Else PixelGrid[3] = PixelGrid[2] If Y+1 < InIMGH Then PixelGrid[4] = ReadPixelFast(X,Y+1,InIMGB) Else PixelGrid[4] = PixelGrid[2] PixelGrid2[0] = PixelGrid[2]:PixelGrid2[1] = PixelGrid[2] PixelGrid2[2] = PixelGrid[2]:PixelGrid2[3] = PixelGrid[2] If PixelGrid[1] = PixelGrid[0] And PixelGrid[1] <> PixelGrid[4] And PixelGrid[0] <> PixelGrid[3] Then PixelGrid2[0] = PixelGrid[0] If PixelGrid[0] = PixelGrid[3] And PixelGrid[0] <> PixelGrid[1] And PixelGrid[3] <> PixelGrid[4] Then PixelGrid2[1] = PixelGrid[3] If PixelGrid[3] = PixelGrid[4] And PixelGrid[3] <> PixelGrid[0] And PixelGrid[4] <> PixelGrid[1] Then PixelGrid2[2] = PixelGrid[4] If PixelGrid[4] = PixelGrid[1] And PixelGrid[4] <> PixelGrid[3] And PixelGrid[1] <> PixelGrid[0] Then PixelGrid2[3] = PixelGrid[1] WritePixelFast X*2,Y*2,PixelGrid2[0],OutIMGB WritePixelFast X*2+1,Y*2,PixelGrid2[1],OutIMGB WritePixelFast X*2,Y*2+1,PixelGrid2[2],OutIMGB WritePixelFast X*2+1,Y*2+1,PixelGrid2[3],OutIMGB Next Next UnlockBuffer InIMGB:UnlockBuffer OutIMGB Return OutIMG End Function
Function AdvMame3x(InIMG) Local InIMGW = ImageWidth(InIMG), InIMGH = ImageHeight(InIMG) Local OutIMG = CreateImage(InIMGW*3, InIMGH*3) If OutIMG = 0 Then Return 0 Local InIMGB = ImageBuffer(InIMG), OutIMGB = ImageBuffer(OutIMG) LockBuffer InIMGB:LockBuffer OutIMGB Local PixelGrid[8], PixelGrid2[8] For X = 0 To InIMGW-1 For Y = 0 To InIMGH-1 For X2 = -1 To 1 For Y2 = -1 To 1 PixelGrid[(X2+1)+(Y2+1)*3] = ReadPixelFast(iMax(iMin(X+X2,0),InIMGW),iMax(iMin(Y+Y2,0),InIMGH-1),InIMGB) Next Next For X2 = -1 To 1 For Y2 = -1 To 1 PixelGrid2[(X2+1)+(Y2+1)*3] = PixelGrid[4] Next Next If PixelGrid[3] = PixelGrid[1] And PixelGrid[7] <> PixelGrid[5] And PixelGrid[1] <> PixelGrid[5] Then PixelGrid2[0] = PixelGrid[3] If PixelGrid[1] = PixelGrid[5] And PixelGrid[1] <> PixelGrid[3] And PixelGrid[5] <> PixelGrid[7] Then PixelGrid2[2] = PixelGrid[5] If PixelGrid[7] = PixelGrid[3] And PixelGrid[7] <> PixelGrid[5] And PixelGrid[3] <> PixelGrid[1] Then PixelGrid2[6] = PixelGrid[3] If PixelGrid[5] = PixelGrid[7] And PixelGrid[5] <> PixelGrid[1] And PixelGrid[7] <> PixelGrid[3] Then PixelGrid2[8] = PixelGrid[5] If (PixelGrid[3] = PixelGrid[1] And PixelGrid[3] <> PixelGrid[7] And PixelGrid[1] <> PixelGrid[5] And PixelGrid[4] <> PixelGrid[2]) Or (PixelGrid[1]=PixelGrid[5] And PixelGrid[1] <> PixelGrid[3] And PixelGrid[5] <> PixelGrid[7] And PixelGrid[4] <> PixelGrid[0]) Then PixelGrid2[1] = PixelGrid[1] If (PixelGrid[7] = PixelGrid[3] And PixelGrid[7] <> PixelGrid[5] And PixelGrid[3] <> PixelGrid[1] And PixelGrid[4] <> PixelGrid[0]) Or (PixelGrid[3]=PixelGrid[1] And PixelGrid[3] <> PixelGrid[7] And PixelGrid[1] <> PixelGrid[5] And PixelGrid[4] <> PixelGrid[6]) Then PixelGrid2[3] = PixelGrid[3] If (PixelGrid[1] = PixelGrid[5] And PixelGrid[1] <> PixelGrid[3] And PixelGrid[5] <> PixelGrid[7] And PixelGrid[4] <> PixelGrid[8]) Or (PixelGrid[5]=PixelGrid[7] And PixelGrid[5] <> PixelGrid[1] And PixelGrid[7] <> PixelGrid[3] And PixelGrid[4] <> PixelGrid[2]) Then PixelGrid2[5] = PixelGrid[5] If (PixelGrid[5] = PixelGrid[7] And PixelGrid[5] <> PixelGrid[1] And PixelGrid[7] <> PixelGrid[3] And PixelGrid[4] <> PixelGrid[6]) Or (PixelGrid[7]=PixelGrid[3] And PixelGrid[7] <> PixelGrid[5] And PixelGrid[3] <> PixelGrid[1] And PixelGrid[4] <> PixelGrid[8]) Then PixelGrid2[7] = PixelGrid[7] For X2 = 0 To 2 For Y2 = 0 To 2 WritePixelFast X*3+X2,Y*3+Y2,PixelGrid2[X2+Y2*3],OutIMGB Next Next Next Next UnlockBuffer InIMGB:UnlockBuffer OutIMGB Return OutIMG End Function
Function iMax(iA,iB) If iA > iB Then Return iB Return iA End Function Function iMin(iA,iB) If iA < iB Then Return iB Return iA End Function
Eagle:
BlitzBasic: [AUSKLAPPEN] [EINKLAPPEN] Function Eagle(InIMG) Local InIMGW = ImageWidth(InIMG), InIMGH = ImageHeight(InIMG) Local OutIMG = CreateImage(InIMGW*2, InIMGH*2) If OutIMG = 0 Then Return 0 Local InIMGB = ImageBuffer(InIMG), OutIMGB = ImageBuffer(OutIMG) LockBuffer InIMGB:LockBuffer OutIMGB Local PixelGrid[8], PixelGrid2[3] For X = 0 To InIMGW-1 For Y = 0 To InIMGH-1 For X2 = -1 To 1 For Y2 = -1 To 1 PixelGrid[(X2+1)+(Y2+1)*3] = ReadPixelFast(iMax(iMin(X+X2,0),InIMGW),iMax(iMin(Y+Y2,0),InIMGH-1),InIMGB) Next Next PixelGrid2[0] = PixelGrid[4]:PixelGrid2[1] = PixelGrid[4] PixelGrid2[2] = PixelGrid[4]:PixelGrid2[3] = PixelGrid[4] If PixelGrid[3] = PixelGrid[0] And PixelGrid[0] = PixelGrid[1] Then PixelGrid2[0] = PixelGrid[0] If PixelGrid[1] = PixelGrid[2] And PixelGrid[2] = PixelGrid[5] Then PixelGrid2[1] = PixelGrid[2] If PixelGrid[3] = PixelGrid[6] And PixelGrid[6] = PixelGrid[7] Then PixelGrid2[2] = PixelGrid[6] If PixelGrid[5] = PixelGrid[8] And PixelGrid[8] = PixelGrid[7] Then PixelGrid2[3] = PixelGrid[8] WritePixelFast X*2,Y*2,PixelGrid2[0],OutIMGB WritePixelFast X*2+1,Y*2,PixelGrid2[1],OutIMGB WritePixelFast X*2,Y*2+1,PixelGrid2[2],OutIMGB WritePixelFast X*2+1,Y*2+1,PixelGrid2[3],OutIMGB Next Next UnlockBuffer InIMGB:UnlockBuffer OutIMGB Return OutIMG End Function
Super2xSaI/SuperEagle:
BlitzBasic: [AUSKLAPPEN] [EINKLAPPEN] Function Super2xSaI(InIMG) Local InIMGW = ImageWidth(InIMG), InIMGH = ImageHeight(InIMG) Local OutIMG = CreateImage(InIMGW*2, InIMGH*2) If OutIMG = 0 Then Return 0 Local InIMGB = ImageBuffer(InIMG), OutIMGB = ImageBuffer(OutIMG) LockBuffer InIMGB:LockBuffer OutIMGB Local PixelGrid[15], PixelGrid2[3] For Y = 0 To InIMGH-1 For X = 0 To InIMGW-1 For X2 = -1 To 2 For Y2 = -1 To 2 PixelGrid[(X2+1)+(Y2+1)*4] = ReadPixelFast(iMax(iMin(X+X2,0),InIMGW),iMax(iMin(Y+Y2,0),InIMGH-1),InIMGB) Next Next If (PixelGrid[9] = PixelGrid[6] And PixelGrid[5] <> PixelGrid[10]) PixelGrid2[3] = PixelGrid[9] PixelGrid2[1] = PixelGrid[9] ElseIf (PixelGrid[5] = PixelGrid[10] And PixelGrid[9] <> PixelGrid[6]) PixelGrid2[3] = PixelGrid[5] PixelGrid2[1] = PixelGrid[5] ElseIf (PixelGrid[5] = PixelGrid[10] And PixelGrid[9] = PixelGrid[6]) Local r = 0 r = r + TempGetResult(PixelGrid[6], PixelGrid[5], PixelGrid[8], PixelGrid[13]) r = r + TempGetResult(PixelGrid[6], PixelGrid[5], PixelGrid[4], PixelGrid[1]) r = r + TempGetResult(PixelGrid[6], PixelGrid[5], PixelGrid[14], PixelGrid[11]) r = r + TempGetResult(PixelGrid[6], PixelGrid[5], PixelGrid[2], PixelGrid[7]) If (r > 0) PixelGrid2[1] = PixelGrid[6] ElseIf (r < 0) PixelGrid2[1] = PixelGrid[5] Else PixelGrid2[1] = TempInterpolate(PixelGrid[5],PixelGrid[6]) EndIf PixelGrid2[3] = PixelGrid2[1] Else If (PixelGrid[6] = PixelGrid[10] And PixelGrid[10] = PixelGrid[13] And PixelGrid[9] <> PixelGrid[14] And PixelGrid[10] <> PixelGrid[12]) PixelGrid2[3] = TempQ_Interpolate(PixelGrid[10], PixelGrid[10], PixelGrid[10], PixelGrid[9]) ElseIf (PixelGrid[5] = PixelGrid[9] And PixelGrid[9] = PixelGrid[14] And PixelGrid[13] <> PixelGrid[10] And PixelGrid[9] <> PixelGrid[15]) PixelGrid2[3] = TempQ_Interpolate(PixelGrid[10], PixelGrid[9], PixelGrid[9], PixelGrid[9]) Else PixelGrid2[3] = TempInterpolate(PixelGrid[9], PixelGrid[10]) EndIf If (PixelGrid[6] = PixelGrid[10] And PixelGrid[6] = PixelGrid[1] And PixelGrid[5] <> PixelGrid[2] And PixelGrid[6] <> PixelGrid[0]) PixelGrid2[1] = TempQ_Interpolate(PixelGrid[6], PixelGrid[6], PixelGrid[6], PixelGrid[5]) ElseIf (PixelGrid[5] = PixelGrid[9] And PixelGrid[5] = PixelGrid[2] And PixelGrid[2] <> PixelGrid[1] And PixelGrid[5] <> PixelGrid[3]) PixelGrid2[1] = TempQ_Interpolate(PixelGrid[6], PixelGrid[5], PixelGrid[5], PixelGrid[5]) Else PixelGrid2[1] = TempInterpolate(PixelGrid[5], PixelGrid[6]) EndIf EndIf If (PixelGrid[5] = PixelGrid[10] And PixelGrid[9] <> PixelGrid[6] And PixelGrid[4] = PixelGrid[5] And PixelGrid[5] <> PixelGrid[14]) PixelGrid2[2] = TempInterpolate(PixelGrid[9], PixelGrid[5]) ElseIf (PixelGrid[5] = PixelGrid[8] And PixelGrid[6] = PixelGrid[5] And PixelGrid[4] <> PixelGrid[9] And PixelGrid[5] <> PixelGrid[12]) PixelGrid2[2] = TempInterpolate(PixelGrid[9], PixelGrid[5]) Else PixelGrid2[2] = PixelGrid[9] EndIf If (PixelGrid[9] = PixelGrid[6] And PixelGrid[5] <> PixelGrid[10] And PixelGrid[8] = PixelGrid[9] And PixelGrid[9] <> PixelGrid[2]) PixelGrid2[0] = TempInterpolate(PixelGrid[9], PixelGrid[5]) ElseIf (PixelGrid[4] = PixelGrid[9] And PixelGrid[10] = PixelGrid[9] And PixelGrid[8] <> PixelGrid[5] And PixelGrid[9] <> PixelGrid[0]) PixelGrid2[0] = TempInterpolate(PixelGrid[9], PixelGrid[5]) Else PixelGrid2[0] = PixelGrid[5] EndIf WritePixelFast X*2,Y*2,PixelGrid2[0],OutIMGB WritePixelFast X*2+1,Y*2,PixelGrid2[1],OutIMGB WritePixelFast X*2,Y*2+1,PixelGrid2[2],OutIMGB WritePixelFast X*2+1,Y*2+1,PixelGrid2[3],OutIMGB Next Next UnlockBuffer InIMGB:UnlockBuffer OutIMGB Return OutIMG End Function
Function TempGetResult(A,B,C,D):Return ((A <> C Or A <> D) - (B <> C Or B <> D)):End Function Function TempInterpolate(A,B):Return (A Shr 1) + (B Shr 1):End Function Function TempQ_Interpolate(A,B,C,D):Return (A Shr 2) + (B Shr 2) + (C Shr 2) + (D Shr 2) + (((A + B + C + D) Shr 2)):End Function
Function SuperEagle(InIMG) Local InIMGW = ImageWidth(InIMG), InIMGH = ImageHeight(InIMG) Local OutIMG = CreateImage(InIMGW*2, InIMGH*2) If OutIMG = 0 Then Return 0 Local InIMGB = ImageBuffer(InIMG), OutIMGB = ImageBuffer(OutIMG) LockBuffer InIMGB:LockBuffer OutIMGB Local PixelGrid[11], PixelGrid2[3] For Y = 0 To InIMGH-1 For X = 0 To InIMGW-1 For X2 = 0 To 1 PixelGrid[X2] = ReadPixelFast(iMax(iMin(X+X2,0),InIMGW),iMax(iMin(Y-1,0),InIMGH-1),InIMGB) PixelGrid[X2+9] = ReadPixelFast(iMax(iMin(X+X2,0),InIMGW),iMax(iMin(Y+2,0),InIMGH-1),InIMGB) Next For X2 = -1 To 2 PixelGrid[X2+2] = ReadPixelFast(iMax(iMin(X+X2,0),InIMGW-1),iMax(iMin(Y,0),InIMGH-1),InIMGB) PixelGrid[X2+6] = ReadPixelFast(iMax(iMin(X+X2,0),InIMGW-1),iMax(iMin(Y+1,0),InIMGH-1),InIMGB) Next If PixelGrid[7] = PixelGrid[4] And PixelGrid[3] <> PixelGrid[8] PixelGrid2[1] = PixelGrid[7] PixelGrid2[2] = PixelGrid[7] If PixelGrid[6] = PixelGrid[7] Or PixelGrid[4] = PixelGrid[1] PixelGrid2[0] = TempInterpolate(PixelGrid[7], TempInterpolate(PixelGrid[7], PixelGrid[3])) Else PixelGrid2[0] = TempInterpolate(PixelGrid[3], PixelGrid[4]) EndIf If PixelGrid[4] = PixelGrid[5] Or PixelGrid[7] = PixelGrid[10] PixelGrid2[3] = TempInterpolate(PixelGrid[7], TempInterpolate(PixelGrid[7], PixelGrid[8])) Else PixelGrid2[3] = TempInterpolate(PixelGrid[7], PixelGrid[8]) EndIf ElseIf PixelGrid[3] = PixelGrid[8] And PixelGrid[7] <> PixelGrid[4] PixelGrid2[3] = PixelGrid[3] PixelGrid2[0] = PixelGrid[3] If (PixelGrid[0] = PixelGrid[3]) Or (PixelGrid[5] = PixelGrid[9]) PixelGrid2[1] = TempInterpolate(PixelGrid[3], TempInterpolate(PixelGrid[3], PixelGrid[4])) Else PixelGrid2[1] = TempInterpolate(PixelGrid[3], PixelGrid[1]) EndIf If PixelGrid[8] = PixelGrid[11] Or PixelGrid[2] = PixelGrid[3] PixelGrid2[2] = TempInterpolate(PixelGrid[3], TempInterpolate(PixelGrid[3], PixelGrid[2])) Else PixelGrid2[2] = TempInterpolate(PixelGrid[7], PixelGrid[8]) EndIf ElseIf PixelGrid[3] = PixelGrid[8] And PixelGrid[7] = PixelGrid[4] Local r = 0 r = r + TempGetResult(PixelGrid[4], PixelGrid[3], PixelGrid[6], PixelGrid[10]) r = r + TempGetResult(PixelGrid[4], PixelGrid[3], PixelGrid[2], PixelGrid[0]) r = r + TempGetResult(PixelGrid[4], PixelGrid[3], PixelGrid[11], PixelGrid[9]) r = r + TempGetResult(PixelGrid[4], PixelGrid[3], PixelGrid[1], PixelGrid[5]) If (r > 0) PixelGrid2[1] = PixelGrid[7] PixelGrid2[2] = PixelGrid[7] PixelGrid2[0] = TempInterpolate(PixelGrid[3], PixelGrid[4]) PixelGrid2[3] = PixelGrid2[0] ElseIf (r < 0) PixelGrid2[2] = PixelGrid[3] PixelGrid2[0] = PixelGrid[3] PixelGrid2[1] = TempInterpolate(PixelGrid[3], PixelGrid[4]) PixelGrid2[2] = PixelGrid2[1] Else PixelGrid2[3] = PixelGrid[3] PixelGrid2[0] = PixelGrid[3] PixelGrid2[1] = PixelGrid[7] PixelGrid2[2] = PixelGrid[7] EndIf Else PixelGrid2[3] = TempInterpolate(PixelGrid[7], PixelGrid[4]) PixelGrid2[0] = PixelGrid2[3] PixelGrid2[3] = TempQ_Interpolate(PixelGrid[8], PixelGrid[8], PixelGrid[8], PixelGrid2[3]) PixelGrid2[0] = TempQ_Interpolate(PixelGrid[3], PixelGrid[3], PixelGrid[3], PixelGrid2[0]) PixelGrid2[2] = TempInterpolate(PixelGrid[3], PixelGrid[8]) PixelGrid2[1] = PixelGrid2[2] PixelGrid2[2] = TempQ_Interpolate(PixelGrid[7], PixelGrid[7], PixelGrid[7], PixelGrid2[2]) PixelGrid2[1] = TempQ_Interpolate(PixelGrid[4], PixelGrid[4], PixelGrid[4], PixelGrid2[1]) EndIf WritePixelFast X*2,Y*2,PixelGrid2[0],OutIMGB WritePixelFast X*2+1,Y*2,PixelGrid2[1],OutIMGB WritePixelFast X*2,Y*2+1,PixelGrid2[2],OutIMGB WritePixelFast X*2+1,Y*2+1,PixelGrid2[3],OutIMGB Next Next UnlockBuffer InIMGB:UnlockBuffer OutIMGB Return OutIMG End Function
HQ2X:
BlitzBasic: [AUSKLAPPEN] [EINKLAPPEN] Function HQ2X(IMG) Local IMG2, X, Y, X2, Y2 Local A,B,C Local D,E,F Local G,H,I Local IMGw = ImageWidth(IMG), IMGh = ImageHeight(IMG) Dim Pixel3x3(3,3) Dim PixelO2x2(2,2) IMG2 = CreateImage(ImageWidth(IMG)*2,ImageHeight(IMG)*2) LockBuffer ImageBuffer(IMG):LockBuffer ImageBuffer(IMG2) For X = 0 To ImageWidth(IMG)-1 For Y = 0 To ImageHeight(IMG)-1 For X2 = -1 To 1 For Y2 = -1 To 1 Pixel3x3((X2+1),(1+Y2)) = ReadPixelFast(X,Y, ImageBuffer(IMG)) If X2+X >= 0 And X2+X < IMGw And Y2+Y >= 0 And Y2+Y < IMGh Pixel3x3((1+X2),(1+Y2)) = ReadPixelFast(X+X2,Y+Y2, ImageBuffer(IMG)) EndIf Next Next A = Pixel3x3(0,0):B = Pixel3x3(1,0):C = Pixel3x3(2,0) D = Pixel3x3(0,1):E = Pixel3x3(1,1):F = Pixel3x3(2,1) G = Pixel3x3(0,2):H = Pixel3x3(1,2):I = Pixel3x3(2,2) PixelO2x2(0,0) = E:PixelO2x2(1,0) = E PixelO2x2(0,1) = E:PixelO2x2(1,1) = E If B <> H And D <> F If D = B Then PixelO2x2(0,0) = D If B = F Then PixelO2x2(1,0) = F If D = H Then PixelO2x2(0,1) = D If H = F Then PixelO2x2(1,1) = F EndIf WritePixelFast X*2+0, Y*2+0, PixelO2x2(0,0), ImageBuffer(IMG2) WritePixelFast X*2+1, Y*2+0, PixelO2x2(1,0), ImageBuffer(IMG2) WritePixelFast X*2+0, Y*2+1, PixelO2x2(0,1), ImageBuffer(IMG2) WritePixelFast X*2+1, Y*2+1, PixelO2x2(1,1), ImageBuffer(IMG2) Next Next UnlockBuffer ImageBuffer(IMG):UnlockBuffer ImageBuffer(IMG2) Return IMG2 End Function
|