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 im RGB-Format

 
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
Caran



Anmeldungsdatum: 11.03.2007
Beiträge: 290
Wohnort: Lörrach

BeitragVerfasst am: 29.05.2007, 17:42    Titel: Point im RGB-Format Antworten mit Zitat

Hi Leute,
ich hab da mal 'ne Frage...
Wie kann ich einen Wert (den ich mit Point ermittelt habe) auf drei Variablen (z.B.: r, g, b) aufteilen, sodass jeder Variable ein Farbwert zugeteilt wird.

Grüße Caran
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 29.05.2007, 18:58    Titel: Antworten mit Zitat

Ich hatte das mal so gelöst...

Code:


Farbe=Point(x,y)

R=Fix(Farbe/&H010000) : Farbe -= R*&h010000
G=Fix(Farbe/&H000100) : Farbe -= G*&h000100
B=Fix(Farbe/&H000001) : Farbe -= B*&h000001

'jetzt hat Farbe den wert 0 und ist in den variablen R,G,B aufgeteilt

'am ende könnte man auch einfach B=Farbe machen

_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Caran



Anmeldungsdatum: 11.03.2007
Beiträge: 290
Wohnort: Lörrach

BeitragVerfasst am: 29.05.2007, 19:56    Titel: Antworten mit Zitat

Hi Eternal_pain,
da wär ich nich drauf gekommen, danke.MfG Caran
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 30.05.2007, 20:14    Titel: Antworten mit Zitat

etwas schneller, wenn du das öfter machen musst.
Code:
Farbe = Point(x, y)

R = (Farbe And &HFF0000) shr 16
G = (Farbe And &H00FF00) shr 8
B = (Farbe And &H0000FF)

_________________
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
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 30.05.2007, 20:49    Titel: Antworten mit Zitat

Eine schöne und einfache Methode, darauf muss man auch erstmal kommen.

Edit:
Hab beide jetzt mal mit Timer getestet und wundere mich etwas das meine Mothode in den meisten fällen etwas schneller war als die andere....
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 31.05.2007, 17:28    Titel: Antworten mit Zitat

ne, die Routine ohne Division und Multiplikation ist bestimmt 10-15mal schneller. Man kann deine Routine aber noch optimieren, siehe Listing.
Wie immer sind aber Pointeraktionen die schnellste Lösung.
Code:
'-------CPU-Takte zählen
#include once "windows.bi"
Const _COUNTER_LOOP_COUNT_ = 2000
Dim Shared As Ulongint _counter_tsc1_, _counter_tsc2_
Dim Shared As Ulongint _counter_overhead_, counter_cycles
Dim Shared As Uint _counter_loop_counter_
Sub _counter_code1_
  Asm
    Xor eax, eax
    cpuid
    rdtsc
    mov [_counter_tsc1_], eax
    mov [_counter_tsc1_+4], edx
  End Asm
End Sub
Sub _counter_code2_
  Asm
    Xor eax, eax
    cpuid
    rdtsc
    mov [_counter_tsc2_], eax
    mov [_counter_tsc2_+4], edx
  End Asm
End Sub
#define COUNTER_BEGIN _
_counter_overhead_ = 2000000000 :_
counter_cycles = 2000000000 :_
SetPriorityClass( GetCurrentProcess(), HIGH_PRIORITY_CLASS ) :_
For _counter_loop_counter_ = 1 To _COUNTER_LOOP_COUNT_ :_
  _counter_code1_ :_
  _counter_code2_ :_
  If (_counter_tsc2_ - _counter_tsc1_) < _counter_overhead_ Then :_
  _counter_overhead_ = _counter_tsc2_ - _counter_tsc1_ :_
  Endif :_
Next :_
For _counter_loop_counter_ = 1 To _COUNTER_LOOP_COUNT_ :_
  _counter_code1_
  ' *** Note the open FOR loop ***
#define COUNTER_END _
  _counter_code2_ :_
  If (_counter_tsc2_ - _counter_tsc1_) < counter_cycles Then :_
  counter_cycles = _counter_tsc2_ - _counter_tsc1_ :_
  Endif :_
Next :_
SetPriorityClass( GetCurrentProcess(), NORMAL_PRIORITY_CLASS ) :_
counter_cycles -= _counter_overhead_
'------------CPU-Takte


Dim As Integer R,G,B,Farbe, x= 350, y= 100
Screen 18,32

Pset (x,y),Rgb(100,200,230)
?"von wegen ist schneller .. haha"
Farbe=Point(x,y)
counter_begin
R=Fix(Farbe/&H010000) : Farbe -= R*&h010000
G=Fix(Farbe/&H000100) : Farbe -= G*&h000100
B=Farbe
counter_end
Print "Eternal_pain  : ";counter_cycles;" CPU - Takte"

Farbe=Point(x,y)
counter_begin
R = (Farbe And &HFF0000) Shr 16
G = (Farbe And &H00FF00) Shr 8
B = (Farbe And &H0000FF)
counter_end
Print "Volta         : ";counter_cycles;" CPU - Takte"
?
?"etwas optimiert sieht es schon besser aus.."
counter_begin
Farbe=Point(x,y)
R=Farbe \ &H010000 : Farbe -= R*&h010000
G=Farbe \ &H000100 : Farbe -= G*&h000100
B=Farbe
counter_end
Print "E_p optimiert : ";counter_cycles;" CPU - Takte"

counter_begin
Farbe=Point(x,y)
R = (Farbe And &HFF0000) Shr 16
G = (Farbe And &H00FF00) Shr 8
B = (Farbe And &H0000FF)
counter_end
Print "Volta         : ";counter_cycles;" CPU - Takte"
?
?" .. aber mit etwas Pointertechnik .. unschlagbar."
Dim As Integer pitch
Dim p As Ubyte Ptr
Screeninfo ,,,,pitch
counter_begin
p = Screenptr + (pitch * y) +(x * 4)
R = p[2]
G = p[1]
B = p[0]
counter_end
Print "Volta  Pointer: ";counter_cycles;" CPU - Takte"
?
Print R,G,B

Sleep
End

_________________
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
Caran



Anmeldungsdatum: 11.03.2007
Beiträge: 290
Wohnort: Lörrach

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

Hey coole Sache, danke an euch alle.
MfG Caran
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 02.06.2007, 04:33    Titel: Antworten mit Zitat

Das mit der Pointertechnik ist natürlich hammer,
wenn ich sowas damals gewusst hätte, hätte ich mir vermutlich nicht 'n halben Tag den kopf zerbrochen wie man das machen könnt um dann doch nur auf eine so langsame methode zu kommen zwinkern
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Apfel



Anmeldungsdatum: 01.07.2008
Beiträge: 13

BeitragVerfasst am: 19.04.2009, 16:51    Titel: Point buffer farblich machen und verwenden. Antworten mit Zitat

Hallo, ich habe hier ein Code Beispiel. Wo man ein Punkt mit Pfeiltasten steuert kann und die Idee ist es dass mit diesem Punkt mittels Point die Farbe abgefragt wird und im bufer gespeichert wird.
Das klappt auch recht gut.

Code:
ScreenRes 600,600,32

DIM AS String Punkt
DIM AS String Wand

DIM AS Integer x = 300
DIM AS INTEGER y = 300
Dim As Integer bufer

Dim PunktFenster AS ANY Ptr
Dim WandFenster As Any Ptr
Dim FarbAnzeiger As Any Ptr

PunktFenster = ImageCreate(9,9,RGB(0,255,0))
WandFenster = IMAGECREATE(82,29,RGB(0,0,255))

BLOAD Punkt, PunktFenster                 
BLoad Wand, WandFenster

Do

    If MULTIKEY(&h4D) And x < 591 THEN x += 1
    IF MULTIKEY(&h4B) AND x >   1 THEN x -= 1
    IF MULTIKEY(&h50) AND y < 591 THEN y += 1
    IF MULTIKEY(&h48) AND y >   1 THEN y -= 1

ScreenLock
Cls

Put(x,y), PunktFenster, PSet
Put(100,200), WandFenster, PSet
Put(200,100), FarbAnzeiger, PSet

bufer = point(x,y)
Print bufer

FarbAnzeiger = IMAGECREATE(32,32,RGB(255,0,0))


ScreenUnLock
Sleep 3
Loop

Sleep 


Als nächstes wollte ich, das ein kleiner Viereck namens „FarbAnzeiger“ mit Hilfe Point bufer gefärbt wird. Und da habe ich keine Ahnung wie man das macht. Kann mir jemand ein Beispiel zeigen. Danke.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


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

BeitragVerfasst am: 19.04.2009, 17:00    Titel: Antworten mit Zitat

Der Thread ist schon 2 Jahre alt... mit den Augen rollen
_________________
» 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: 19.04.2009, 19:29    Titel: Antworten mit Zitat

na ja, zwinkern
Code:
ScreenRes 600,600,32

Dim As Integer x = 300
Dim As Integer y = 300

Dim PunktFenster As Any Ptr
Dim WandFenster As Any Ptr
Dim FarbAnzeiger As Any Ptr

PunktFenster = ImageCreate(9,9,RGB(0,255,0))
WandFenster = ImageCreate(82,29,RGB(0,0,255))
FarbAnzeiger = ImageCreate(32,32)

Do

  If MultiKey(&h4D) And x < 591 Then x += 1
  If MultiKey(&h4B) And x >   1 Then x -= 1
  If MultiKey(&h50) And y < 591 Then y += 1
  If MultiKey(&h48) And y >   1 Then y -= 1

  ScreenLock
  Cls
  Put(100,200), WandFenster, PSet

  'eine ausgefüllte Box in das Image "FarbAnzeiger" zeichnen
  'Line FarbAnzeiger, (0,0)-(32,32), Point(x,y), BF  'und
  'Put(200,100), FarbAnzeiger, PSet
  'oder direkt zeichen
  Line (200,100)-(232,132), Point(x,y), BF

  Put(x,y), PunktFenster, PSet

  ScreenUnLock
  Sleep 1
Loop Until InKey=Chr(27)

_________________
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
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 19.04.2009, 19:32    Titel: Antworten mit Zitat

Da frage ich mich spontan: Wo ist eigentlich eternal_pain geblieben?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Apfel



Anmeldungsdatum: 01.07.2008
Beiträge: 13

BeitragVerfasst am: 19.04.2009, 19:41    Titel: Antworten mit Zitat

Geeeeeenau so habs ich mir vorgestellt, echt danke Volta. happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
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