DEUTSCHE VERSION |
|
Links | | | Forums | | | Comments | | | Report news |
Chat | | | Polls | | | Newsticker | | | Archive |
amiga-news.de Forum > Programmierung > Datatypes: Farben festlegen lassen | [ - Search - New posts - Register - Login - ] |
-1- 2 3 | [ - Post reply - ] |
2006-05-02, 22:21 h Ralf27 Posts: 2779 User |
Ok, ich mal wieder mit den Datatypes. Also, kann man die Datatypes veranlassen die Stifte für sich zu reservieren oder darf/muß man das selbst machen? Ich hab in den Includes gesehn das man an die Farbpalette dran kommt, aber wenn man die Datatypes irgendwie selbst dazu veranlassen könnte... -- http://www.alternativercomputerclub.de.vu [ - Answer - Quote - Direct link - ] |
2006-05-02, 22:47 h whose Posts: 2156 User |
@Ralf27: Soweit ich weiß, allokieren die Datatypes keine Pens fürs Dithering. Aber ich denke mal, daß Dir thomas da wesentlich genaueres zu sagen kann, da er wesentlich mehr über die Datatypes weiß. Grüße -- --- µA1 PPC 750GX-800 A4000 PPC 604e-233 [ - Answer - Quote - Direct link - ] |
2006-05-02, 22:52 h Ralf27 Posts: 2779 User |
Zitat: Ja, genau so wie ich die ganze Zeit die Bilder auf mache, werden keine Pens reserviert. Anderst als auf einem privaten Screen kann ich ja auch nicht einfach dann die Farben wieder zurück schreiben, wenn sie mal falsch sein sollten. Das ist ja auch nicht die feine Art auf einem öffentlichen Screen. -- http://www.alternativercomputerclub.de.vu [ - Answer - Quote - Direct link - ] |
2006-05-03, 08:48 h thomas Posts: 7718 User |
Natürlich reservieren Datatypes die von ihnen verwendeten Pens. Wie kommst du darauf, daß sie es nicht tun ? Das wäre ziemlich fatal, denn dann könntest du pro Screen nur ein Bild laden. Sobald du das zweite Bild lädst, hätte das erste Bild vollkommene Falschfarben. Gruß Thomas -- Email: thomas-rapp@web.de Home: thomas-rapp.homepage.t-online.de/ [ - Answer - Quote - Direct link - ] |
2006-05-03, 10:05 h Mad_Dog Posts: 1944 User |
Zitat: Das wäre zwar Murks, aber gehen tut's. Wenn Du die Farbpalette vorher sicherst... Besser ist natürlich ObtainBestPen, da entstehen keine "Verfärbungen". Siehe auch hier: http://www.norman-interactive.com/C-Kurs_8_5.html http://www.norman-interactive.com/C-Kurs_8_10.html -- http://www.norman-interactive.com [ - Answer - Quote - Direct link - ] |
2006-05-03, 11:29 h Ralf27 Posts: 2779 User |
Zitat: Dann wüßte ich zu gerne wieso sich die Farben im Bild verändern wenn ich die rechts Maustaste drücke und sich das MagicMenu öffnet? Also auf der WB, aber auf dem privaten Screen ist das genau so. Oder tritt das nur bei mir auf? -- http://www.alternativercomputerclub.de.vu [ - Answer - Quote - Direct link - ] |
2006-05-03, 11:44 h thomas Posts: 7718 User |
Weil du MagicMenu so konfiguriert hast. Wenn du die Maustaste losläßt, müssen die Farben aber wieder richtig sein. Wenn nicht, hast du in deinem Programm etwas falsch gemacht. Nach dem DisposeDTObject werden die Stifte z.B. freigegeben. Du mußt das Datatype-Object so lange offen halten, wie das Bild angezeigt wird. Gruß Thomas -- Email: thomas-rapp@web.de Home: thomas-rapp.homepage.t-online.de/ [ - Answer - Quote - Direct link - ] |
2006-05-03, 11:50 h Ralf27 Posts: 2779 User |
Zitat: Arg, das ist es. An solchen Kleinigkeiten kann das hängen. Aber: Da ich das Bild schon in einer eigenen Bitmap kopiert habe, bleibt das bild dann wohl zweifach im Speicher vorhanden. Kann man denn Speicher vom Datatype irgendwie freigeben lassen, aber die Stifte festhalten bis ich sie von den Datatypes freigeben lasse? Ich vermute auch das die Datatypes auf einem System ohne Grafikkarte alle Grafikdaten in den Chipram schreiben. Wie sieht es bei Systemen mit Grafikkarte aus? -> Fastram? (Customchips werde da ja nicht benutzt) (Es geht mir eigentlich um den Speicherverbrauch, denn ich gering halten möchte) -- http://www.alternativercomputerclub.de.vu [ - Answer - Quote - Direct link - ] |
2006-05-03, 12:12 h whose Posts: 2156 User |
Zitat: Weil mir genau das schon mehrfach passiert ist. Aber wie ich schon sagte, hast Du da die wesentlich größere Erfahrung und ich weiß jetzt, daß ich da etwas verkehrt gemacht habe Grüße -- --- µA1 PPC 750GX-800 A4000 PPC 604e-233 [ - Answer - Quote - Direct link - ] |
2006-05-03, 14:32 h NoImag Posts: 1050 User |
@Ralf27: Ich bin mir da jetzt nicht ganz sicher, aber probier doch mal mit ObtainBestPenA() im Shared-Modus, die Stifte selbst nochmal zu allozieren (du hast ja gesagt, dass du die Palette hast), solange das Datatype noch offen ist. Wenn das klappt, dann kannst du anschließend das Datatype freigeben und die Stifte sind immer noch geschützt. Tschüß [ - Answer - Quote - Direct link - ] |
2006-05-05, 00:13 h NoImag Posts: 1050 User |
@ Ralf27: Ich habe mal einen Blick in die Autodocs zum picture.datatype geworfen. Mit den Tags PDTA_ColorTable und PDTA_NumAlloc bekommst du eine Tabelle der vom Datatype allozierten Pens und die Anzahl der allozierten Pens. Laut den Autodocs verwendet das picture.datatype ObtainBestPenA() zur Allozierung der Pens. Sie sind also nur "shared" alloziert. Darum sollte es problemlos möglich sein, mit ObtainPen() genau die Pens nochmal "shared" zu allozieren, die schon vom Datatype alloziert wurden. Wenn du ObtainPen() ohne Flags aufrufst, dann wird der von dir angeforderte Pen "shared" alloziert. Ob du vernünftige RGB-Werte angeben musst, weiß ich nicht, das musst du einfach ausprobieren. Nachdem du die Pens alloziert hast, kannst du das Datatype-Objekt wieder freigeben und die von dir benutzten Pens sind weiterhin geschützt. Tschüß [ - Answer - Quote - Direct link - ] |
2006-05-06, 08:16 h Ralf27 Posts: 2779 User |
@NoImag: Danke, das muß ich später mal testen. Denn genau das würde mir einige kb Arbeitspeicher (kostbarer Chipram) sparen, die im extremfall mal einige 100kb Chipraum ausmachen können. -- http://www.alternativercomputerclub.de.vu [ - Answer - Quote - Direct link - ] |
2006-07-23, 01:23 h Ralf27 Posts: 2779 User |
Zitat: Danke für die Beschreibung. Ich bin leider jetzt erst richtig dazu gekommen mir das ganze richtig anzusehn. Das erste was mir aufgefallen ist, das es es auch PDTA_ColorTable2 gibt. Aber ok, PDTA_ColorTable2. Da frag ich mich eben auch ob ich für die Tabelle selbst speicher reservieren muß (wovon ich ausgehe). Wenn die die Tabelle habe, dann muß ich also jeden einzelnen Wert via ObtainPen sichern? Und dann nebenher: Wenn ich einen eigenen Screen aufmache, dann kann man ja auch selbst vor dem öffnen die Farben festlegen. Wie mach ich das denn am besten? Ich nehme mal an das ich auf einem privaten Screen eigentlich keine Stifte schützen muß oder doch? -- http://www.alternativercomputerclub.de.vu [ - Answer - Quote - Direct link - ] |
2006-07-23, 21:50 h NoImag Posts: 1050 User |
Zitat: Richtig. Der Sinn erschließt sich mir aus der Beschreibung in den AutoDocs jedoch nicht. Zitat: Das ist keineswegs gesagt. Normalerweise steht in den AutoDocs, ob die Systemfunktion oder das Anwendungsprogramm den Speicher reserviert. In diesem Fall schweigen sich die AutoDocs dazu aus. Vielleicht kann dies ja jemand beantworten, der mehr Erfahrung mit der datatypes.library hat als ich. Zitat: Ja. Zitat: Du gibst den Tag SA_Colors32 mit deiner Farbtabelle an. Die Tabelle ist genauso aufgebaut, wie bei LoadRRGB32(). Zitat: Das kommt darauf an. Normalerweise sind alle Pens auf einem privaten Screen geschützt. Das bedeutet natürlich, dass Funktionen, die mit den SharedPens arbeiten, nicht funktionieren. In diesem Fall musst du SA_SharePens mit TRUE angeben. Du bist dann aber auch nicht mehr 100% Herr über die Farben. Andere Programme haben natürlich grundsätzlich mit deinem privaten Screen nichts zu schaffen. Da brauchst du keine Angst zu haben. Tschüß [ - Answer - Quote - Direct link - ] |
2006-07-23, 22:44 h Ralf27 Posts: 2779 User |
Ok, aber ich glaub ich muß da jetzt aufpassen: Zum einen hab ich die Stifte die ich sichern muß wenn ich auf einem öffentlichen Screen arbeiten möchte und zum anderen die Farbtabelle, wenn ich auf einem privaten Screen arbeiten will. Mein Programm läuft zwar gerade so wie es ist, aber ich muß halt das Bild offen halten um die Pens zu halten. Und genau diese Speicherverschwendung will ich halt beenden. Oh, die Datatypes... -- http://www.alternativercomputerclub.de.vu [ - Answer - Quote - Direct link - ] |
2006-07-24, 09:01 h NoImag Posts: 1050 User |
Zitat: Du musst die beiden Fälle nicht getrennt behandeln. Wenn du deinen privaten Screen mit SA_SharePens, TRUE öffnest, dann kannst du auch auf dem privaten Screen genauso vorgehen, wie auf dem öffentlichen Screen. Tschüß [ - Answer - Quote - Direct link - ] |
2006-07-24, 23:12 h Ralf27 Posts: 2779 User |
Zitat: Ok, fragt sich dann nur wie es mit dem Speicher aussieht denn ich vom Datatype anfordern muß(oder auch nicht) für die Stifte. Wie groß muß denn dieser Block sein? -- http://www.alternativercomputerclub.de.vu [ - Answer - Quote - Direct link - ] |
2006-07-26, 21:52 h NoImag Posts: 1050 User |
Zitat: Ich habe mir nochmal die Doku zur datatypes.library näher angesehen. Es steht zwar nicht eindeutig da, aber ich verstehe es so, dass du bei GetDTAttrsA() in der Tag-Liste den Pointer auf einen Pointer auf ein UByte-Array angeben musst, d.h. du liest in einem vom Datatype angelegten Speicherbereich. Ich vermute, in Basic nimmst du einfach eine Long-Variable und trägst dessen Adresse in der Tag-Liste ein und benutzt dann den Wert in deiner Variable als Basis-Adresse zum Peeken. Wie das UByte-Array aussieht ist nirgends spezifiziert (wäre ja auch zuviel verlangt). Ich vermute es gibt für jeden vom Datatype mit ObtainBestPenA() allozierten Pen ein Byte in diesem Array. Wieviele Pens es sind, erfährst du mit PDTA_NumAlloc. Sollte das oben beschriebene zum Absturz führen, dann habe ich mich geirrt, aber probier es erstmal so aus. Die Dokumentation zur datatypes.library ist fürchterlich. Tschüß [ - Answer - Quote - Direct link - ] |
2006-10-03, 22:35 h Ralf27 Posts: 2779 User |
Ich habe es heute mal wieder versucht, aber leider ohne Erfolg. Ich steig da einfach nicht durch. Inzwischen ist der Speicherverbrauch durch das doppelte Bildhalten schon recht erschreckend geworden. Ich muß das wohl möglichst bald geregelt bekommen. Fragt sich nur wie... -- http://www.alternativercomputerclub.de.vu [ - Answer - Quote - Direct link - ] |
2006-10-03, 22:49 h NoImag Posts: 1050 User |
@Ralf27: Wenn wir Dir helfen sollen, dann musst du schon ein bisschen ausführlicher werden. Tschüß [ - Answer - Quote - Direct link - ] |
2006-10-03, 23:18 h Ralf27 Posts: 2779 User |
Zitat: Ok, kurze Zusammenfassung: Ich lade ein Bild mit den Datatypes. Dabei gibt es zwei Möglichkeiten: einmal auf einen eigenen Screen und des anderen auf einem Fenster auf der WB. Zur Zeit lass z.b. beim Screen öffnen einen Screen mit der gleichen Farbtiefe wie das Datatypebild mit SharePens öffnen und gut ist. Allerdings hab ich bei der Fenster bzw. Screenstory das Problem, das die Farben ja gehalten werden müssen, sodas sie nicht bei weiteren Farbveränderungen durch andere Programme wieder verändert werden. Auf dem privaten Screen hätte ich die Möglichkeit die Farben vorher festzulegen und gut ist, also PenShares FALSE, also Default. Allerdings müßte ich vorher die Farben wissen und beim Screen öffnen angeben. Auf dem öffentlichen Fenster müßte ich die Pens irgendwie festhalten. In beiden Fällen lass ich einfach die Bilder in den Datatypes immer aktiv, da ich aber vorher die Bilder umkopieren muß (Interleave Bitmap, wieso auch immer...), hab ich also immer zwei mal das ganze Bild im Chipram, was natürlich recht viel Speicher frisst. Und genau das will ich unterbinden. Ich hoffe, ich konnte mein Problem irgendwie verständlich rüberbringen. -- http://www.alternativercomputerclub.de.vu [ - Answer - Quote - Direct link - ] |
2006-10-03, 23:45 h bubblebobble Posts: 707 User |
Gibt es keine Möglichkeit dem Datatype zu sagen, dass die Daten des Bilder freigegeben werden sollen während die Pens allociert bleiben ? Ein Brute force fix wäre, einfach alle Pen zu locken und das Datatype freizugene. Dann verändern sich die Farben nicht. Das Bild zweimal im speicher zu halten macht für mich keinen Sinn. Eine Version dürfte auf jeden Fall freigebar sein. -- Thilo Köhler, Author von: HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, TKUnpacker Homepage: http://www.hd-rec.de [ - Answer - Quote - Direct link - ] |
2006-10-04, 09:26 h NoImag Posts: 1050 User |
@Ralf27: Hast Du denn die Lösungen für das Problem, die ich weiter oben beschrieben habe schon einmal ausprobiert? Wenn ja, was ist dabei passiert? Tschüß [ - Answer - Quote - Direct link - ] |
2006-10-04, 22:31 h Ralf27 Posts: 2779 User |
Zitat: Ich hab da gestern so einiges Versucht. Von SW bis Guru war alles vorhanden. Alle Versuche auf dem eigenen Screen. Hm, zum verrückt werden. Aber erst mal der Reihe nach: SA_Colors32 brauch ich also beim Screen öffnen, wenn ich die Farben gleich setzen will. Aber da ist mir auch gleich aufgefallen, das ich dann vermutlich dann auch bei seltsamen Bildfarbenzusammensetzungen dann vermutlich auch nix mehr seh bezüglich Menus und Mauszeiger, also wenn ich Pech hab. Bzw. Falschfarbenmauszeiger oder undeutliches Menus. Dann doch alles Shared lassen? Dann ist es ja egal ob Screen oder Window, ich muß dann nur die Stifte sichern lassen, bis ich das Fenster/Screen schlies. -- http://www.alternativercomputerclub.de.vu [ - Answer - Quote - Direct link - ] |
2006-10-05, 00:15 h NoImag Posts: 1050 User |
Zitat: Ja, genau das würde ich Dir empfehlen. Wie es gehen sollte, habe ich weiter oben beschrieben. Tschüß [ - Answer - Quote - Direct link - ] |
2006-10-06, 21:21 h Ralf27 Posts: 2779 User |
Mit PDTA_NumAlloc bekomme ich zwar die Anzahl der Pens, aber leider finde ich die Liste nicht. Ich hab schon einiges versucht, aber ich finde die Liste der reservierten Pens nicht. Bzw. kurze Frage: UByte=1Byte (nehme ich einfach mal an). Hab einfach alles mal ausgelesen und mal nachgesehn ob was logisches rauskommt, aber bei allen versuchten Tags war nix logisches dabei. -- http://www.alternativercomputerclub.de.vu [ - Answer - Quote - Direct link - ] |
2006-10-06, 22:47 h Ralf27 Posts: 2779 User |
Ok, ich benutze jetzt PDTA_ColorTable, aber mir ist eben auch aufgefallen das es ab V44(OS3.5??) auch PDTA_AllocatedPens gibt. Ist bei mir in den Includes nicht aufgeführt. Oh, ist das alles verwirrend... Ich hoffe ich laufe mit PDTA_ColorTable und PDTA_NumAlloc jetzt richtig... -- http://www.alternativercomputerclub.de.vu [ - Answer - Quote - Direct link - ] |
2006-10-06, 23:02 h Ralf27 Posts: 2779 User |
Da ist nochwas: PDTA_DestMode Hiermit kann man wohl denn Ausgabemodus der Bitmaps bestimmen (soweit ich das verstanden habe) Bedeutet das, das ich dann mit PMODE_42 immer Bitmaps bekomme, die ich direkt mit z.b BltBitMapRastPort benutzen kann? PMODE_43 ist da ja vorgegeben. Oder was genau macht PDTA_DestMode? -- http://www.alternativercomputerclub.de.vu [ - Answer - Quote - Direct link - ] |
2006-10-09, 00:52 h NoImag Posts: 1050 User |
Zitat: V44 ist OS3.5. Wenn Du das voraussetzen willst, dann kannst Du auch PDTA_AllocatedPens ausprobieren. Der Unterschied zu PDTA_ColorTable wird mir aus den Autodocs aber nicht klar. Wie sieht es denn aus? Funktioniert es? Zitat: Mit PDTA_DestMode kannst Du eine Bitmap verlangen, in der Du selbst rumschreiben/auslesen darfst (PMODE_42), d.h. die Bitmap-Struktur ist so aufgebaut wie in den Includes/RKRMs beschrieben und die Grafikdaten sind als Standard-Amiga-Bitplanes organisiert. Bei der Voreinstellung (PMODE_43), musst Du dagegen immer über die Funktionen der graphics.library gehen. BltBitMapRastPort() ist eine Funktion der graphics.library und kann darum in beiden Fällen benutzt werden. Tschüß [ - Answer - Quote - Direct link - ] |
2006-10-09, 11:30 h Ralf27 Posts: 2779 User |
Zitat:Ich möchte es weiter ab OS3.0 laufen lassen. Es funktioniert leider nicht, bzw. habe ich das bis jetzt so leider nicht hin bekommen. Zitat: Genau das ist das Problem, das ich diese Bitmaps so nicht benutzen kann. Ich benutze die BltBitMapRastPort-Funktion aus der graphics-lib und wenn ich die Bitmap nicht vorher konvertiere, dann läuft es leider nicht immer richtig. Und das ist auch so ein Punkt denn ich nicht so richtig verstehn: Zum einen funktioniert es wohl immer auf einem eigenen privaten screeen *ohne* umwandeln. Somit wäre das Problem gelöst. Allerdings funktioniert es nicht immer auf der WB. Und diese "ab und zu" gefällt mir nicht. Ich benutze wohlgemerkt immer die Lib-Funktionen für die Grafik und es geht nicht immer. Es geht nur immer, wenn ich vorher das Bild konvertiere, bzw. einfach in eine eigene Bitmap kopiere und dann von da aus blitte. Deswegen hab ich ja auch zwei mal das Bild im Speicher. Einmal das von den Datatypes und einmal das konvertierte. Und das von den Datatypes kann ich ja nur dann schliesen, wenn ich die Stifte sichere. Ok, PMODE_42. Versuch ich es damit. Aber leider ist das in meinen OS3.1 Includes nicht inplementiert, ist wohl auch erst ab OS3.5 dazu gekommen. Diese interleaved Bitmaps bringen mich noch zum rotieren. -- http://www.alternativercomputerclub.de.vu [ - Answer - Quote - Direct link - ] |
-1- 2 3 | [ - Post reply - ] |
amiga-news.de Forum > Programmierung > Datatypes: Farben festlegen lassen | [ - Search - New posts - Register - Login - ] |
Masthead |
Privacy policy |
Netiquette |
Advertising |
Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved. |