Seite 2 von 2

Re: RGB-daten auslesen

Verfasst: 21.03.2010 09:52
von sohmen
Hab es geändert nur der Code wie er eingestellt ist,war nur als Denkstütze gedacht.
Scrollfeld ist hinzugekommen und Der BMP-Editor is neu. Arbeite jetzt gerade an dem Drag and Drop-System für die BMP´s sowie Tastatur und Mausunabhängige Steuerung.
Bild

Re: RGB-daten auslesen

Verfasst: 26.03.2010 13:16
von MarkusOhm
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... :bounce:
Ps:bei Fehler haftet der Anwender.

Re: RGB-daten auslesen

Verfasst: 04.04.2010 16:41
von sohmen
Danke versuche mich durch die Codierung durchzuwursteln. Hab nur wenig Zeit und bis das Programm fertiggestellt ist kann es noch dauern. Ich musste bereits knapp 3 Versuche Aufgeben. Jetzt wird die Exe ohn e zusätzliche Ordner für das Programm auskommen nur die Designarbeit hinkt hinterher... :freak: