amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > nicht die farbe [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- 2 [ - Beitrag schreiben - ]

04.07.2009, 18:05 Uhr

AGSzabo
Posts: 1663
Nutzer
Ich habe nach erfolgreicher Umsetzung von GetVar() in mein Programm die Configurierbarkeit des APen eingebaut. Das funktioniert aber komischerweise nur mit den ersten 4 farben. die 5. farbe wäre eigentlich laut farbeinsteller ein dunkles grau, eskommt aber ein dunkles BLAU raus. ich habe nach antworten gesucht in docs und includes und vermute dass es etwas mit colormaps zu tun haben könnte, werde aber nicht schlau draus. wie mache ich dass pen 5 im programm die farbe des 5. pens aus dem voreinsteller hat?
--
e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110

[ - Antworten - Zitieren - Direktlink - ]

04.07.2009, 19:10 Uhr

Goja
Posts: 280
Nutzer
Soweit ich weiss sind die Farben im "Voreinsteller" (meinst du sys:Prefs/Palette?) die ersten vier und die letzten vier.
Die Farben sind nur dann hintereinander angeordnet wenn der Bildschirm lediglich 8 Farben hat.

Hatte was mit der Art und Weise zu tun wie MagicWorkbench arbeitet, denke ich.
--
http://www.baud.de Amiga A4000T MC68060RC50 PPC604E@233Mhz 274Mb OS3.9 & OS4.0

[ - Antworten - Zitieren - Direktlink - ]

04.07.2009, 19:12 Uhr

thomas
Posts: 7716
Nutzer
@AGSzabo:

Wenn du mit "Farbeinsteller" Prefs/Palette meinst, dann sind es nicht die ersten acht Farben, die eingestellt werden, sondern die ersten vier und die letzen vier.

Wenn dein Screen also z.B. 16 Farben hast, dann setzt Palette die Pens 0, 1, 2 und 3 sowie 12, 13, 14 und 15.

IMHO solltest du nicht den Pen konfigurierbar machen, sondern die Farbe (also den RGB-Wert). Dann kann dein Programm mit ObtainPen(-1) einen beliebigen freien Pen bekommen und mit SetRGB32 die Farbe setzen.

Oder, wenn es nicht exakt die Farbe sein muß und du nicht davon abhängig sein möchtest, daß noch ein Pen frei ist, kannst du mit ObtainBestPen einen Pen auswählen, der am besten zu der eingestellten Farbe paßt.

Nicht vergessen, alle Pens mit ReleasePen wieder freizugeben, wenn sie nicht mehr benötigt werden !

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

04.07.2009, 21:13 Uhr

AGSzabo
Posts: 1663
Nutzer
ah ja, das bringt mich weiter. aber gelten die reservierten pens systemweit oder nur für screen oder fenster? ich habe gelesen dass man dazu eine colormap barucht, verstehe aber den zusammenhang nicht. und ob ich palextra attachen muss? wo soll ich was reinpoken oder auslesen? für meine zwecke sollten die pens systemweit gelten...

--
e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110

[ Dieser Beitrag wurde von AGSzabo am 04.07.2009 um 21:19 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

04.07.2009, 22:00 Uhr

thomas
Posts: 7716
Nutzer

Die Colormap bekommst du aus Screen->ViewPort.ColorMap.

"Poken" darfst du nie und nirgends !!! Wenn du etwas ändern möchtest, dann benutze die dafür vorgesehene Funktion.

"Peeken" ist manchmal erlaubt, wie z.B. hier um die ColorMap zu bekommen. Trotzdem solltest du immer erst suchen, ob es nicht eine Funktion für die Ermittlung der gewünschten Werte gibt.

Die Pens werden natürlich nur auf dem Screen reserviert, dessen ColorMap du benutzt hast. Systemweite Pens gibt es nicht. Jeder Screen hat seine eigene Bitmap und Palette. Die Anzahl Pens hängt von der Tiefe der Bitmap ab.

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

04.07.2009, 22:41 Uhr

AGSzabo
Posts: 1663
Nutzer
aha. jetzt frage ich mich ob ich den pubscreen gelockt lassen muss während ich pens darauf reserviert habe? oder reicht es wenn ich ihn nur locken muss BIS ich meine pens darauf reserviert habe? oder wie komme ich sonst an seine addresse? darf ich den lock aufheben wenn ich den pointer auf die colormap ausgelesen habe?
--
e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110

[ Dieser Beitrag wurde von AGSzabo am 04.07.2009 um 22:47 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

04.07.2009, 23:50 Uhr

thomas
Posts: 7716
Nutzer
@AGSzabo:

Du mußt verhindern, daß der Screen geschlossen wird, denn danach sind alle Pointer und Pens ungültig. Das geht entweder mit LockPubScreen oder mit OpenWindow.

D.h. wenn du ein Fenster geöffnet hast, kannst du auch Window->WScreen nehmen.

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

04.07.2009, 23:51 Uhr

NoImag
Posts: 1050
Nutzer
Zitat:
Original von AGSzabo:
aha. jetzt frage ich mich ob ich den pubscreen gelockt lassen muss während ich pens darauf reserviert habe? oder reicht es wenn ich ihn nur locken muss BIS ich meine pens darauf reserviert habe? oder wie komme ich sonst an seine addresse? darf ich den lock aufheben wenn ich den pointer auf die colormap ausgelesen habe?


Solange Du ein Fenster auf dem PubScreen geöffnet hast, wird der Pubscreen nicht geschlossen, Du brauchst ihn also nicht gelockt halten. Den Zeiger auf den Screen findest Du auch in der Window-Struktur. LockPubScreen() zu verwenden ist aber in Ordnung.

Tschüß

Nachtrag: thomas war schneller...


[ Dieser Beitrag wurde von NoImag am 04.07.2009 um 23:52 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

05.07.2009, 08:28 Uhr

AGSzabo
Posts: 1663
Nutzer
hmmm... vielleicht sollte ich etwas genauer beschreiben was ich machen will: ich habe da ein gui-system "xui" in arbeit, dessen farben einstellbar werden sollen. diese farben sollen für alle xui-apps gelten!
--
e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110

[ - Antworten - Zitieren - Direktlink - ]

05.07.2009, 08:39 Uhr

Ralf27
Posts: 2779
Nutzer
Noch ein GUI-System für den Amiga? Hm, wieviele gibt es denn schon eigentlich?
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

05.07.2009, 08:49 Uhr

AGSzabo
Posts: 1663
Nutzer
@Ralf27:

man sagt, gui system-erstellung ist wie hello world. dabei ist es heute noch ebensowenig ernst wie kreutzworträtsel. ich hasse sudoku, ich programmier lieber was! es hat den selben effekt.
--
e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110

[ - Antworten - Zitieren - Direktlink - ]

05.07.2009, 08:57 Uhr

Ralf27
Posts: 2779
Nutzer
@AGSzabo:

Ich kann dich schon verstehn, dadurch lernt man.
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

05.07.2009, 09:02 Uhr

thomas
Posts: 7716
Nutzer
Zitat:
Original von AGSzabo:
ich habe da ein gui-system "xui" in arbeit, dessen farben einstellbar werden sollen. diese farben sollen für alle xui-apps gelten!


Kein Problem. Laß den Benutzer die RGB-Werte einstellen. Wenn du ein Fenster öffnest, besorgst du dir die Pens mit ObtainBestPen und beim Schließen des Fensters gibst du sie wieder frei. So machen das alle Anwendungen.

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

05.07.2009, 09:12 Uhr

AGSzabo
Posts: 1663
Nutzer
@thomas: hmmm, bestpen um die pens zu sharen? die farbwerte aber in der xuibase (library)? sollte dann das fenster seine objekte mit der penlist versorgen (mit SET-methode an alle members broadcasten)?

ps: und was meinen die docs der farbwert soll left-justified uebergeben werden? heist das "FFFFFF00" oder "00FFFFFF" oder hat das damit nix zu tun?

[ Dieser Beitrag wurde von AGSzabo am 05.07.2009 um 09:46 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

05.07.2009, 09:51 Uhr

thomas
Posts: 7716
Nutzer
Zitat:
Original von AGSzabo:
ps: und was meinen die docs der farbwert soll left-justified uebergeben werden? heist das "FFFFFF00" oder "00FFFFFF" oder hat das damit nix zu tun?


Jede Farbkomponente, also R, G und B, wird getrennt als 32bit-Wert zwischen 0 (ganz dunkel) und ffffffff (ganz hell) übergeben.

Wenn du jetzt nur Werte zwischen 0 und ff hast, dann mußt du dafür sorgen, daß die nach ganz links kommen, sonst bekommst du nur "ganz dunkel" und "fast ganz dunkel", also alles schwarz.

Also ein r=44 g=88 b=ff wird idealerweise als 0x44444444, 0x88888888, 0xffffffff übergeben.

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

08.07.2009, 20:39 Uhr

Mad_Dog
Posts: 1944
Nutzer
Siehe:

http://w3.norman-interactive.com/C-Kurs_8_5.html
http://w3.norman-interactive.com/C-Kurs_8_10.html

Letzteres Beispiel zeigt die Verwendung von ObtainBestPen in einem praxisnahen Programm.

--
http://www.norman-interactive.com

[ - Antworten - Zitieren - Direktlink - ]

09.07.2009, 05:41 Uhr

AGSzabo
Posts: 1663
Nutzer
@Mad_Dog:

ok, gut, danke, jetzt hab ichs ganz kapiert.

aber sind denn 3 x 32 bit nicht viel mehr als man wirklich darstellen kann?

mir scheint es reicht wenn ich nicht pro guisystem-fenster eine penliste allokiere sondern per screen (beim öffnen des fensters) und diese von fenstern aus share. wird das letzte guisystem-fenster (used-counter) auf einem screen geschlossen werden die pens released. hat irgendjemand einwände?

--
e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110

[ Dieser Beitrag wurde von AGSzabo am 09.07.2009 um 08:07 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

09.07.2009, 08:22 Uhr

Thore
Posts: 2266
Nutzer
@AGSzabo:
Natürlich sind 3 x 32 Bit mehr als man darstellen kann. Hast Du schon vergessen daß in der Amiga-Welt immer alles schon für die Zukunft vorbereitet ist? Momentan gibt es ein Projekt, wobei die Customchips durch eigenkreierte FPGAs ersetzt werden sollen, mal sehen ob da nicht bald ein 96 Bit Modus für die Farben gibt *ironie*

[ - Antworten - Zitieren - Direktlink - ]

09.07.2009, 08:32 Uhr

AGSzabo
Posts: 1663
Nutzer
bezieht sich "ironie" auf den 96bitmodus oder auf die fpga geschichte oder beides?

e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110

[ Dieser Beitrag wurde von AGSzabo am 09.07.2009 um 08:33 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

09.07.2009, 08:47 Uhr

Thore
Posts: 2266
Nutzer
Nur auf den Farbmodus. Die FPGAs sind Tatsache. Dabei sollen die Customchips durch Replikate ersetzt werden, ähnlich wie Natami, nur daß die CustomChip-Ersatzteile in einem echten Amiga eingebaut werden können. Das ist aber ein anderes Thema und hier ziemlich off-topic =)

[ - Antworten - Zitieren - Direktlink - ]

09.07.2009, 19:56 Uhr

Andreas_Wolf
Posts: 2980
Nutzer
> nur daß die CustomChip-Ersatzteile in einem echten Amiga eingebaut
> werden können.

Gibt's dazu außer dem, was du gerade dazu geschrieben hast, schon irgendwelche öffentlichen Informationen?

[ - Antworten - Zitieren - Direktlink - ]

09.07.2009, 22:14 Uhr

AGSzabo
Posts: 1663
Nutzer
@Andreas_Wolf:

ich programmiere mein guisystem jetzt so dass pens mit drei byte §FF FF FF reserviert werden können. ich rechne die werte zur allokierung hoch mittels multiplikation mit $01010101. ein longword pro pen lässt sich leichter handhaben als drei und wenn es negativ ist oder das höchste bit gesetzt ist kann das sogar noch was bedeuten.
--
e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110

[ - Antworten - Zitieren - Direktlink - ]

09.07.2009, 22:18 Uhr

Andreas_Wolf
Posts: 2980
Nutzer
@ AGSzabo:

Hö? Auf welche Äußerung von mir beziehst du dich?

[ - Antworten - Zitieren - Direktlink - ]

09.07.2009, 22:27 Uhr

AGSzabo
Posts: 1663
Nutzer
@Andreas_Wolf:

oh. das war ein versehen. ist allgemein gemeint in sinne des topics des threads.
--
e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110

[ - Antworten - Zitieren - Direktlink - ]

10.07.2009, 10:00 Uhr

Thore
Posts: 2266
Nutzer
@Andreas_Wolf:
Ja, und ich dachte, Dir entgeht sowas nicht =)
Das mit den Farben war rein utopisch wie schon angemerkt, aber hier gibts Infos zum Rest:
http://www.totalamiga.org/files/TA25_JensIviewExtract.pdf

[ - Antworten - Zitieren - Direktlink - ]

10.07.2009, 10:56 Uhr

thomas
Posts: 7716
Nutzer
@Andreas_Wolf:

Hat Jens Schoenfeld doch letztens großartig auf einer Messe vorgestellt, sogar mit Gewinnspiel für Software, die nicht kompatibel ist.

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

14.07.2009, 01:44 Uhr

AGSzabo
Posts: 1663
Nutzer
ok, jetzt funktioniert alles. ein wert in der größenordnung von 24 bit wird auf 96 bit hochgerechnet:

code:
allocpen:
		move.l	(a0)+,d1		; read color vaule $xxxxxx
		moveq	#0,d2
		moveq	#0,d3
		move.b	d1,d3
		lsr.l	#8,d1
		move.b	d1,d2
		lsr.l	#8,d1

		move.l	d1,d0
		move.l	#$01010101,d1

		bsr	Mul32	; d1*d0 to d0
		move.l	d0,d4

		move.l	d2,d0
		bsr	Mul32
		move.l	d0,d2

		move.l	d3,d0
		bsr	Mul32
		move.l	d0,d3

		move.l	d4,d1

		move.l	a2,a0			; colormap
		lea	.pens_tags(pc),a1
		jsr	_LVOObtainBestPenA(a6)


außerdem hole ich mir wenn der obtain failt mit FindColor den besten änlichen pen.

--
e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110

[ Dieser Beitrag wurde von AGSzabo am 14.07.2009 um 01:49 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

14.07.2009, 06:57 Uhr

thomas
Posts: 7716
Nutzer
Zitat:
Original von AGSzabo:
wenn der obtain failt


Warum benutzt du nicht OBP_FailIfBad,FALSE ?

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

14.07.2009, 09:02 Uhr

AGSzabo
Posts: 1663
Nutzer
@thomas:
Zitat:
docs:
With OBP_FailIfBad==FALSE, ObtainBestPen will only fail if the ViewPort contains no sharable colors.


In diesem fall liefert FindColor noch die passendsten Farbe. Oder seh ich das falsch:

Zitat:
docs:
Its intended use is for programs which pop up on public screens when those screens are not using palette sharing. You might use this function as a fallback when ObtainBestPenA() says that there are no sharable pens.



hm?


ps: außerdem benutze ich OBP_Precision, PRECISION_GUI. Is das gut in meinem Fall? Und mein Programm ist fixiert auf höchstens 256 pens wegen bytes als speicher für die Pen nummern. Ein rastport hat fuer die pen nummern auch blos bytes, obwohl OBP ein long zurückgibt!

--
e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110

[ Dieser Beitrag wurde von AGSzabo am 14.07.2009 um 09:10 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

14.07.2009, 09:47 Uhr

thomas
Posts: 7716
Nutzer
@AGSzabo:

Zitat:
In diesem fall liefert FindColor noch die passendsten Farbe. Oder seh ich das falsch

Ist schon ok. Ich würde bei einer GUI nur davon ausgehen, daß ich immer auf einem Screen lande, der palette-sharing aktiv hat. Dann würde ObtainBestPen nie fehlschlagen und FindColor wäre überflüssig.


Zitat:
außerdem benutze ich OBP_Precision, PRECISION_GUI. Is das gut in meinem Fall?

Für eine GUI genau richtig. Deshalb heißt es so.


Zitat:
Ein rastport hat fuer die pen nummern auch blos bytes, obwohl OBP ein long zurückgibt!

Das Long ist für den Fehlschlag. Wie willst du bei einem Byte prüfen, ob die Funktion fehlgeschlagen ist, wenn alle Werte von 0 bis 255 ok sind ? Dafür brauchst du einen Wert, der außerhalb des gültigen Bereichs liegt.

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]


-1- 2 [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > nicht die farbe [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.