Tipp bitte auch den Testcode lauffähig und mit möglichst wenige fehler hochstellen.
So ist es diese Lösung die du gesucht hast??:
Code: Alles auswählen
;----Ohm_Studios---
;----26.3.10---
;---PureBasic441--
;----Alles Wichtig---
;Erstma Konstanten zur schnellen Wertzuordnung
#MaximaleKartenBreite=500
#MaximaleKartenHoehe=500
#ErrorbeimNutzen=-1
#Allright=7
;Dann ne Structure um nicht mit 3.Dimension arbeiten zu müssen
Structure Farbwerte
Rot.l
Gruen.l
Blau.l
EndStructure
Structure KarteInfoFarbe
BreitederKarte.l
HoehederKarte.l
NamederKarte.s
EndStructure
;eine Variabel dimensionieren und auf Global!! setzen um diese in der procedure und im Code später zu nutzen
Global MapTeileInfo.KarteInfoFarbe
Global Dim KarteWerte.Farbwerte(#MaximaleKartenBreite,#MaximaleKartenHoehe)
;die Proceduren selbsterklärend
Procedure LadeBitmapKarte(Name_der_Karte.s="")
If Name_der_Karte.s<>""
Shared MapTeileInfo.KarteInfoFarbe
Shared KarteWerte.Farbwerte()
KartenID.l=LoadSprite(#PB_Any,Name_der_Karte.s)
If KartenID.l<>0
MapTeileInfo\BreitederKarte=SpriteWidth(KartenID)/2
MapTeileInfo\HoehederKarte=SpriteHeight(KartenID)
If StartDrawing(SpriteOutput(KartenID))<>0
For SchleifeY.l=0 To MapTeileInfo\HoehederKarte
For SchleifeX.l=0 To MapTeileInfo\BreitederKarte Step 2
KarteWerte(SchleifeX/2+1,SchleifeY+1)\Rot=255*Red(Point(SchleifeX+1,SchleifeY))+Red(Point(SchleifeX+2,SchleifeY))
KarteWerte(SchleifeX/2+1,SchleifeY+1)\Gruen=255*Green(Point(SchleifeX+1,SchleifeY))+Green(Point(SchleifeX+2,SchleifeY))
KarteWerte(SchleifeX/2+1,SchleifeY+1)\Blau=255*Blue(Point(SchleifeX+1,SchleifeY))+Blue(Point(SchleifeX+2,SchleifeY))
Next SchleifeX.l
Next SchleifeY.l
StopDrawing()
Else
ProcedureReturn #ErrorbeimNutzen
EndIf
ProcedureReturn #Allright
EndIf
Else
ProcedureReturn #ErrorbeimNutzen
EndIf
EndProcedure
Procedure SpeichereBitmapKarte(Name_der_Karte.s="")
If Name_der_Karte.s<>""
Shared MapTeileInfo.KarteInfoFarbe
Shared KarteWerte.Farbwerte()
SpriteID.l=CreateSprite(#PB_Any,MapTeileInfo\BreitederKarte,MapTeileInfo\HoehederKarte)
If SpriteID<>0
If StartDrawing(SpriteOutput(SpriteID.l))<>0
For SchleifeY.l=0 To MapTeileInfo\HoehederKarte
For SchleifeX.l=0 To MapTeileInfo\BreitederKarte
Rot1.l=Round(KarteWerte(SchleifeX+1,SchleifeY+1)\Rot/255, #PB_Round_Down)
Rot2.l=KarteWerte(SchleifeX+1,SchleifeY+1)\Rot-(Rot1*255)
Gruen1.l=Round(KarteWerte(SchleifeX+1,SchleifeY+1)\Gruen/255, #PB_Round_Down)
Gruen2.l=KarteWerte(SchleifeX+1,SchleifeY+1)\Gruen-(Gruen1*255)
Blau1.l=Round(KarteWerte(SchleifeX+1,SchleifeY+1)\Blau/255, #PB_Round_Down)
Blau2.l=KarteWerte(SchleifeX+1,SchleifeY+1)\Blau-(Blau1*255)
Plot((ScleifeX*2+1),SchleifeY+1,RGB(Rot1.l, Gruen1.l, Blau1.l))
Plot((SchleifeX*2+2),SchleifeY+1,RGB(Rot2.l, Grun2.l, Blau2.l))
Next SchleifeX.l
Next SchleifeY.l
StopDrawing()
If SaveSprite(SpriteID,Name_der_Karte.s+".bmp")=0
ProcedureReturn #ErrorbeimNutzen
Else
ProcedureReturn #Allright
EndIf
;---Hier kann man noch das Programm eine Include Schreiben lassen mit dem Loader--
;------Aber das sollte genügen---
Else
ProcedureReturn #ErrorbeimNutzen
EndIf
Else
ProcedureReturn #ErrorbeimNutzen
EndIf
Else
ProcedureReturn #ErrorbeimNutzen
EndIf
EndProcedure
Procedure ErstelleNeueBitmapKarte(NamederMap.s="",Breite.l,Hoehe.l)
If Breite.l<#MaximaleKartenBreite+1 And Hoehe.l<#MaximaleKartenHoehe+1 And NamederMap.s<>""
Shared MapTeileInfo.KarteInfoFarbe
ClearStructure(@MapTeileInfo, KarteInfoFarbe)
MapTeileInfo\BreitederKarte=Breite.l
MapTeileInfo\HoehederKarte=Hoehe.l
MapTeileInfo\NamederKarte=NamederMap.s
ProcedureReturn #Allright
Else
ProcedureReturn #ErrorbeimNutzen
EndIf
EndProcedure
Ich hoffe dies erklärt sich von selbst...

Ps:bei Fehler haftet der Anwender.