01.11.2009, 20:37
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.
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