Aktuelle Zeit: 05.12.2020 01:28

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: [ERLEDIGT] Wie auf Array mithilfe eines Pointers zugreifen?
BeitragVerfasst: 25.10.2020 21:53 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
Wie auf ein Array mithilfe eines Pointers zugreifen?

Ich würde gerne ein Array verwenden um auf die einzelnen Pixel im Speicher zuzugreifen.
Irgendwie geht das doch oder? :freak:

Code:
Code:
EnableExplicit

Structure VIDEO_BUFFER
  width.i
  height.i
  *bits
  size.i
EndStructure 

Structure PIXEL
  Array color.Long(0,0)
EndStructure

Procedure.i VideoBuffer(Width.i,Height.i)
  Protected *buffer.VIDEO_BUFFER
  Protected bytes.i
  bytes = (Width * Height) * 4
  *buffer = AllocateMemory(bytes + SizeOf(VIDEO_BUFFER))
  If *buffer
    With *buffer
      \width = Width
      \height = Height
      \bits = *buffer + SizeOf(VIDEO_BUFFER)
      \size = bytes
    EndWith
  EndIf
  ProcedureReturn *buffer
EndProcedure

Procedure.i Main()
  Protected *vid.VIDEO_BUFFER
  Protected *pixel.PIXEL
  *vid = VideoBuffer(320,200);nur zu Demozwecken - in Realität haben wir nur den Zeiger/Pointer auf einen VIDEO_BUFFER...
  If *vid
    Debug "Buffer: 0x" + Hex(*vid)
   
    *pixel = *vid;<- Zeiger/Pointer übergeben...
    Debug *pixel\color(10,10);<- wie kann ich das array verwenden?
   
    FreeMemory(*vid)
  EndIf
  ProcedureReturn #Null
EndProcedure

Main()

End

_________________

Links:
PureBasic Discord
[INCLUDE] GLFW 3.3 Library
[MODULE] Bass Library 2.4 (Win)
[LIBRARY] Hexi Binary2Hex (Win)



Zuletzt geändert von Mijikai am 26.10.2020 01:09, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wie auf ein Array mithilfe eines Pointers zugreifen?
BeitragVerfasst: 25.10.2020 23:10 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
Hallo!

Normal so:

Code:
Protected Dim pixel.PIXEL(0)
Dim pixel(0)\color(10,10)


Aber mit Pointer und so wie du vielleicht willst ?

_________________
Betriebssysteme: MX Linux 19 / Windows 10 / Mac OS 10.15.7 / Android 7.0 ;)

Manchmal muß das Rad neu erfunden werden.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wie auf ein Array mithilfe eines Pointers zugreifen?
BeitragVerfasst: 25.10.2020 23:54 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
"Array" erstellt ein dynamisches Array. Das erstellt also seinen eigenen Speicher, den man nicht wiederverwenden kann. Stattdessen musst du entweder zwei geschachtelte statische Arrays mit wenigstens einer festen Dimension nutzen oder aber du nutzt ein eindimensionales "unendliches" Array, das nur noch dafür da ist beliebige Stellen im Speicher per Index anzusprechen. Zusammen mit einem Macro kannst du den Index dann auch dynamisch an width anpassen.
Das könnte dann so aussehen:
Code:
EnableExplicit

Structure PIXEL
   color.l[0]
EndStructure

Structure VIDEO_BUFFER
   width.i
   height.i
   *bits.PIXEL
   size.i
EndStructure

Macro color(vid, x, y)
   vid\bits\color[x + y * vid\width]
EndMacro

Procedure.i VideoBuffer(Width.i,Height.i)
   Protected *buffer.VIDEO_BUFFER
   Protected bytes.i
   bytes = (Width * Height) * 4
   *buffer = AllocateMemory(bytes + SizeOf(VIDEO_BUFFER))
   If *buffer
      With *buffer
         \width = Width
         \height = Height
         \bits = *buffer + SizeOf(VIDEO_BUFFER)
         \size = bytes
      EndWith
   EndIf
   ProcedureReturn *buffer
EndProcedure

Procedure.i Main()
   Protected *vid.VIDEO_BUFFER
   Protected *pixel.PIXEL
   *vid = VideoBuffer(320,200);nur zu Demozwecken - in Realität haben wir nur den Zeiger/Pointer auf einen VIDEO_BUFFER...
   If *vid
      Debug "Buffer: 0x" + Hex(*vid)
      
      color(*vid, 10, 10) = 1234
      Debug color(*vid, 10, 10)
      
      FreeMemory(*vid)
   EndIf
   ProcedureReturn #Null
EndProcedure

Main()

End

_________________
Ubuntu Gnome 20.04 LTS x64, PureBasic 5.72 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50, 5.60, 5.71b2)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [ERLEDIGT] Wie auf Array mithilfe eines Pointers zugreif
BeitragVerfasst: 26.10.2020 01:10 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
Super, danke für die schnellen Antworten :allright:

_________________

Links:
PureBasic Discord
[INCLUDE] GLFW 3.3 Library
[MODULE] Bass Library 2.4 (Win)
[LIBRARY] Hexi Binary2Hex (Win)



Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 14 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye