Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
NLT-Spielstandskonverter (jede beliebige Richtung)
#34
Sorry das ich mich erst so spät wieder melde. Aber ich bin voll in Torchlight versunken. ^^
Ich wollte dir ja den Source meines kleinen Converters geben. Der ist nicht groß, deswegen poste ich den einfach mal hier. Ist PureBasic Code.

Code:
;/------------------------\
;| DSA1 Portrai-Konverter |
;|                        |
;| Version 0.01           |
;| Stand: 20.09.2008      |
;|                        |
;| PureBasic 4.20         |
;\------------------------/

EnableExplicit

Procedure.f DistanceRGB(Col1,Col2)
  
  Define.l rd,gd,bd

  rd=Col1&$00FF - Col2&$00FF
  gd=Col1>>8&$00FF - Col2>>8&$00FF
  bd=Col1>>16&$00FF - Col2>>16&$00FF
  
  ProcedureReturn Sqr(rd*rd+gd*gd+bd*bd)
  
EndProcedure

Define.f Distance,OldDistance

Define.l Img,RawFile,x,y,i,ImgColor,RawIndex,ChangeCnt,Found
Define.s ImgFileName,RawFileName

Dim Pal.l(255)

For i = 0 To 255
  Pal(i) = $FFFFFFFF
Next

;Standart Portrai-Wertebereich (32 Farben)
Pal(32) = $000000
Pal(33) = $FC0000
Pal(34) = $900000
Pal(35) = $A0C0F0
Pal(36) = $90B0F0
Pal(37) = $70A0F0
Pal(38) = $6090E0
Pal(39) = $5080D0
Pal(40) = $5070C0
Pal(41) = $4060A0
Pal(42) = $305090
Pal(43) = $304070
Pal(44) = $203060
Pal(45) = $203050
Pal(46) = $E0E0E0
Pal(47) = $C0C0C0
Pal(48) = $B0B0B0
Pal(49) = $A0A0A0
Pal(50) = $808080
Pal(51) = $707070
Pal(52) = $505050
Pal(53) = $404040
Pal(54) = $00FC00
Pal(55) = $009000
Pal(56) = $00E0F0
Pal(57) = $00B0D0
Pal(58) = $0080A0
Pal(59) = $4060F0
Pal(60) = $2040C0
Pal(61) = $103090
Pal(62) = $102040
Pal(63) = $F0F0F0

;40-7F
;zusätzlicher Wertebereich
Pal(65)  = $A0C0E0
Pal(66)  = $7090C0
Pal(67)  = $406090
Pal(68)  = $305080
Pal(69)  = $203060
Pal(70)  = $102050
Pal(71)  = $001030
Pal(72)  = $00E0F0
Pal(73)  = $00A0E0
Pal(74)  = $0070C0
Pal(75)  = $0050B0
Pal(76)  = $0090F0
Pal(77)  = $0030F0
Pal(78)  = $2000F0
Pal(79)  = $8000F0
Pal(80)  = $004000
Pal(81)  = $005000
Pal(82)  = $007000
Pal(83)  = $008010
Pal(84)  = $00A010
Pal(85)  = $F0E070
Pal(86)  = $D0B050
Pal(87)  = $C07030
Pal(88)  = $A03010
Pal(89)  = $900000
Pal(93)  = $909090
Pal(97)  = $A40000
Pal(98)  = $380000
Pal(99)  = $486898
Pal(100) = $385898
Pal(101) = $184898
Pal(102) = $083888
Pal(103) = $002878
Pal(104) = $001868
Pal(105) = $000848
Pal(106) = $000038
Pal(107) = $000018
Pal(108) = $000008
Pal(110) = $888888
Pal(111) = $686868
Pal(112) = $585858
Pal(113) = $484848
Pal(114) = $282828
Pal(115) = $181818
Pal(118) = $008000
Pal(119) = $003800
Pal(120) = $008898
Pal(121) = $005878
Pal(122) = $002848
Pal(123) = $000898
Pal(124) = $000068
Pal(125) = $000038
Pal(192) = $004000
Pal(193) = $104000
Pal(194) = $204000
Pal(195) = $304000
Pal(196) = $404000
Pal(197) = $403000
Pal(198) = $402000
Pal(199) = $401000
Pal(200) = $0000C0
Pal(201) = $00C0C0
Pal(202) = $C00000
Pal(203) = $402038
Pal(204) = $402040
Pal(205) = $382040
Pal(206) = $302040
Pal(207) = $282040
Pal(208) = $202040
Pal(209) = $202840
Pal(210) = $203040
Pal(211) = $203840
Pal(212) = $204040
Pal(213) = $204038
Pal(214) = $204030
Pal(215) = $204028
Pal(217) = $A0C0E0
Pal(218) = $40C0E0
Pal(219) = $30A0C0
Pal(220) = $2090B0
Pal(221) = $1080A0
Pal(222) = $005060
Pal(223) = $30642C
Pal(226) = $D0D0D0
Pal(233) = $606060
Pal(236) = $303030
Pal(237) = $202020
Pal(238) = $101010
Pal(240) = $20F000
Pal(241) = $A0C0F0
Pal(242) = $A0B0F0
Pal(243) = $6070B0
Pal(244) = $405090
Pal(245) = $304070
Pal(246) = $202050
Pal(247) = $101030
Pal(248) = $002030
Pal(249) = $0000B0
Pal(250) = $F05040
Pal(251) = $E02000
Pal(252) = $D02000
Pal(253) = $600000
Pal(254) = $00F0F0

UseJPEGImageDecoder()
UsePNGImageDecoder()

ImgFileName = ProgramParameter(0)
If ImgFileName = ""
  MessageRequester("DSA1 Portrai-Konverter","Es wurde kein Bild angegeben.",16)
  End
EndIf

RawFileName = Left(ImgFileName,Len(ImgFileName)-Len(GetExtensionPart(ImgFileName))) + "raw"

Img = LoadImage(#PB_Any,ImgFileName)
If Img = 0
  MessageRequester("DSA1 Portrai-Konverter","Das Bild konnte nicht geladen werden.",16)
  End
EndIf

RawFile = CreateFile(#PB_Any,RawFileName)
If RawFile = 0
  MessageRequester("DSA1 Portrai-Konverter","Die neue Datei konnte nicht erstellt werden.",16)
  End
EndIf

StartDrawing(ImageOutput(Img))

For y = 0 To 31

  For x = 0 To 31

    ImgColor = Point(x,y)
    
    Found = 0

    OldDistance = $0FFFFFFF

    For i = 0 To 255
    
      If Pal(i) <> $FFFFFFFF
        
        Distance = DistanceRGB(ImgColor,Pal(i))
        
        If Distance = 0
          Found = 1
          WriteByte(RawFile,i & $00FF)
          Break
        EndIf
        
        If Distance < OldDistance
          OldDistance = Distance
          RawIndex = i
        EndIf
        
      EndIf

    Next
    
    If Found = 0
      WriteByte(RawFile,RawIndex & $00FF)
      ChangeCnt + 1
    EndIf

  Next

Next

StopDrawing()

CloseFile(RawFile)

MessageRequester("DSA1 Portrai-Konverter","Bild als .raw gespeichert." + Chr(10) + "Es mussten " + Str(ChangeCnt) + " Pixel in ihrer Farbe angepasst werden.")
End
Zitieren


Nachrichten in diesem Thema
RE: Programm zur Konvertierung eines Spielstandes von DSA3 nach DSA1 - von Thorium - 01.11.2009, 20:37



Benutzer, die gerade dieses Thema anschauen: 8 Gast/Gäste