Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Point aus einem Buffer

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 25.09.2008, 16:38    Titel: Point aus einem Buffer Antworten mit Zitat

In einen Buffer kann man beispielspielsweise mit
pset buffer,(x,y),RGB(255,255,255)
was reinmalen.

gibts einen befehl womit man diesen pixel bei position (x,y) wieder auslesen kann?
Normalerweise gibts ja die Funktion Point(x,y). Aber den kann man anscheinend nur auf den screen anwenden.
Gibt es eine möglichtkeit die funktion "point" auf einen buffer anzuwenden?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 25.09.2008, 17:10    Titel: Antworten mit Zitat

OK, hab mal in der Befehlsreferenz aufm Freebasic-portal geschaut! Da stehts drin!!
x = point(x,y,buffer)

Aber ich hab noch eine frage.. die würd ich dann aber in einem anderen fred stellen.. Trotzdem danke
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 26.09.2008, 11:16    Titel: Antworten mit Zitat

Eine weitere Möglichkeit statt Point(x,y) -> Point(er) grinsen

x= buffer[(x*pitch)+y+8]
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Eastler_dart



Anmeldungsdatum: 25.09.2005
Beiträge: 177
Wohnort: Baden-Würtemberg + Sachsen

BeitragVerfasst am: 26.09.2008, 12:13    Titel: Antworten mit Zitat

hallo Alle, hallo OneCypher,

möchte noch ne Anmerkung loslassen, die ich in anderen Versuchen entdeckt habe:
Wenn man ein FB-Grafikfenster z.B. in Farbtiefe 16-bit öffnet, und danach ein Grafikbuffer im Ram mit z.B. 32-Bit Farbtiefe, dann können Fehler entstehen, wenn man mit PSET oder POINT auf diesen Ram-Buffer zugreift, weil die beiden scheinbar Screen nach der Farbtiefe fragen (hier dann 16-bit) und mit der Voraussetzung im Ram-Buffer (32-bit) arbeiten.

Bei mir hab ich dann per direkten Ram-Zugriff "buffer[0] buffer[1] buffer[2] buffer[3]" oder so auf den Ram-Buffer zugegriffen.
Drum muß ich nicht nur Volta recht geben, sondern empfehlen, nach dessen Art vorzugehen

u.A. findet Ihr unter:
http://www.freebasic-portal.de/index.php?s=userpage&id=156
eine Vorversion eines Tutorials, in welchem in der Rubrik "Farben umsetzen" genau aufgeführt ist, wie ich auf die einzelnen Farbwerte zugreife. Allerdings dort in einem ImageCreate-Buffer, der hat eine andere "Vorspann"-Größe.

hoffe es hilft

Eastler
_________________
Kaum macht mans richtig, schon geht's
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen Yahoo Messenger
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 26.09.2008, 12:55    Titel: Antworten mit Zitat

@Volta: Wofür steht die Variable "pitch" ?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 26.09.2008, 12:57    Titel: Antworten mit Zitat

Referenz hat Folgendes geschrieben:
'pitch' gibt die Anzahl der Bytes pro Zeile an. Der Wert berechnet sich auch für alle Farbtiefen (bpp = 1, 2 oder 4): pitch=(width*bpp+15) AND -16 Wie Sie sehen, wird also jede Bildzeile so aufbereitet, dass die Anzahl der Byte pro Zeile ein Vielfaches von 16 ist. Dies wirkt sich darin aus, dass in fast jedem Bildpuffer einige ungenutzte Bytes vorhanden sind; in Anbetracht der Größe des zur Verfügung stehenden Speichers fallen diese aber gar nicht ins Gewicht. Der Vorteil dieser Methode liegt darin, dass sich der Umgang mit den Bildpuffern optimieren lässt; die heutigen 32bit-Prozessoren bieten 128 Bit - Register (= 16 Byte) die damit optimal angewandt werden können. Einem minimal größeren Speicheraufwand steht also ein spürbar kleinerer Zeitaufwand bei Berechnungen gegenüber.

_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 26.09.2008, 13:08    Titel: Antworten mit Zitat

ja, genau so..

pitch für ein Image ermittelst du mit
IMAGEINFO buffer,,,,pitch
oder
pitch = buffer[4] (wenn buffer = Integer Ptr)
pitch = cast(integer ptr, buffer)[4]
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 26.09.2008, 13:54    Titel: Antworten mit Zitat

@JoJo: danke für die schnelle antwort lächeln
@Volta: Ok... für IMAGEINFO muss ich erstmal die neueste fb-version installieren.. werd ich auch machen.

Noch eine kurze frage:

ich stoße immer wieder auf eine type namens "fb.image"
Da ich im web auch schon gesucht hab und keine Dokus gefunden hab frag ich hier einfach mal. Hat jemand Dokus zu den eigenschaften von fb.image oder von "fb" ? da scheint sich noch ne menge zu verstecken wovon ich bisher nich viel gehört/gelesen habe!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 26.09.2008, 15:04    Titel: Antworten mit Zitat

Dazu solltest du dir die fbgfx.bi ansehen, darin sind der Namespace fb und Type as Image definiert.
Doks dazu kenne ich leider auch nicht, nur wenige Beispiele gibt es in den Examples\gfx.
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 26.09.2008, 15:40    Titel: Antworten mit Zitat

Also irgendwas raff ich da nicht.. entschuldigt die ausdrucksweise...
Code:

screen 19,32
dim img as FB.IMAGE ptr
img = imagecreate( 640, 480 )


erstellt einen buffer mit der größe 640x480 pixel und eine farbtiefe von 32 bit.

in der fbgfx.bi steht:

Code:

   type IMAGE field = 1
      union
         old as _OLD_HEADER
         type as uinteger
      end union
      bpp as integer
      width as uinteger
      height as uinteger
      pitch as uinteger
      _reserved(1 to 12) as ubyte
      
'      '' properties
'      declare property pixels() as ubyte ptr
   end type


So wie ich das bisher kannte, speichert man den zeiger der von imagecreate ausgeben wird, in einer "normalen" pointer-variable. Also entweder integer oder any ptr...
Hier wird der pointer aber irgendwie an einen "record?" übergeben..
Nach meinem Verständnis müsste man den pointer der von imagecreate ausgeben wird doch an eine eigenschaft des records "img" übergeben werden...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eastler_dart



Anmeldungsdatum: 25.09.2005
Beiträge: 177
Wohnort: Baden-Würtemberg + Sachsen

BeitragVerfasst am: 26.09.2008, 17:27    Titel: Antworten mit Zitat

hallo alle, hallo OneCypher

ich versuch mal das, was ich schon mal getestet hatte, hier zu erstellen:
Code:

DIM AS INTEGER PTR RamZeiger
DIM AS Byte PTR PixelZeiger
DIM AS UBYTE PixelBlauWert, PixelGruenWert, PixelRotWert, PixelAlphaWert
DIM AS UINTEGER PixelKopie

RamZeiger=ImageCreate( 640, 480, 0, 32) :'Schwarze Farbe, 32-Bit tiefe)
Bload "meineBitmap.bmp" RamZeiger

PixelZeiger=RamZeiger + LEN(FB.IMAGE)

'Beispiel die Farbwerte des ersten  Pixels im Bild holen
PixelBlauWert=PixelZeiger[0]
PixelGruenWert=PixelZeiger[1]
PixelRotWert=PixelZeiger[2]
PixelAlphaWert=PixelZeiger[3]
PixelKopie=RGBA(PixelRotWert, PixelGruenWert, PixelBlauWert, PixelAlphaWert)

'Beispiel ein beliebiges Pixel holen:
DIM AS UINTEGER PixelJeZeile
' BildTiefe wäre RamZeiger[1]*8 :'FB hat Tiefe in Bytes, normal = in pixel = X 8
' BildBreite wäre RamZeiger[2]
' BildHoehe wäre RamZeiger[3]
PixelJeZeile = RamZeiger[4] :' = PitchWert im Ram auslesen
PixelBlauWert=PixelZeiger[  (YPos*PixelJeZeile)  + XPos + 0  ]
PixelGruenWert=PixelZeiger[  (YPos*PixelJeZeile)  + XPos + 1  ]
PixelRotWert=PixelZeiger[  (YPos*PixelJeZeile)  + XPos + 2  ]
PixelAlphaWert=PixelZeiger[  (YPos*PixelJeZeile)  + XPos + 3  ]
PixelKopie=RGBA(PixelRotWert, PixelGruenWert, PixelBlauWert, PixelAlphaWert)

!!CODE AUS GEDÄCHNTNIS, NICHT GETESTET!!
hoffe, du kannst damit was anfangen

Eastler
_________________
Kaum macht mans richtig, schon geht's
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen Yahoo Messenger
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz