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

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

-1- [ - Beitrag schreiben - ]

07.03.2005, 22:00 Uhr

Ralf27
Posts: 2779
Nutzer
Folgendes ist gegeben:

Eine unkomprimierte Bilddatei die die RGB-Daten (24Bit) im folgenden
Format speichert. Die Farbwerte (RGB) gehen von 0-255.

die Daten im folgenden Format enthalten:
BGR BGR BGR ...

also 3Bytes pro Pixel

Wie kann ich jetzt am besten diesen Daten auf die Grafikkarte bringen ohne jeden Punkt einzeln zu setzen (was zwar geht, aber nunja, bitte keine Steine werfen :D :D )

Welche Funktion kann ich benutzen, bzw. wie muß ich vorgehn für eine Grafikkarte?

[ Dieser Beitrag wurde von Ralf27 am 07.03.2005 editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

08.03.2005, 00:03 Uhr

Ralf27
Posts: 2779
Nutzer
Hab eine Lösung gefunden, die aber in der Cybergraphics-Lib drin ist. Allerdings keine 100%tige Lösung, denn leider läuft es so nur mit Falschfarben. Ich hab halt leider das Problem das die Daten mit BGR und nichtmit RGB vorhanden sind. Wie kann ich das am besten lösen?
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

08.03.2005, 10:02 Uhr

thomas
Posts: 7717
Nutzer

Ich sehe zwei Möglichkeiten:

1. du vertauschst beim Lesen jeweils den R und B Wert, sodaß die Pixel als RGB RGB RGB im Speicher stehen. Das kannst du dann mit WritePixelArray in den Bildschirm schreiben.

2. du legst statt eines Arrays eine Bitmap an (mit AllocBitMap), da kannst du das Pixelformat mit angeben. Wenn du dann LockBitMapTags aufrufst, kannst du direkt in die Bitmap schreiben. Statt WritePixelArray mußt du dann BltBitMap bzw. BltBitMapRastPort benutzen. Achtung: LockBitMapTags blockiert u.U. das Multitasking, du mußt also genau überlegen, wie du damit umgehst.

Gruß Thomas

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

[ - Antworten - Zitieren - Direktlink - ]

08.03.2005, 10:02 Uhr

Micha1701
Posts: 938
Nutzer
Besorg Dir z.B. eine BitMap mit dem Pixelformat BGR. Wenn Du da die Daten reinschaufelst, dann beachtet ein ClipBlit oder BltBitMap das Pixelformat beim kopieren...

Oder Du verwendest einfach eine Routine, die das Pixelformat ändert. Wir ja nur ein wenig rumgeswappt bzw. ein paar Bits geshiftet...


--
:boing: Micha :boing:

Look at my HPs:
http://www.lanser-online.de.vu

http://www.RealmsofPower.de.vu



[ - Antworten - Zitieren - Direktlink - ]

08.03.2005, 12:01 Uhr

Ralf27
Posts: 2779
Nutzer
Hm, kann ich eigentlich gleich ein BGR-Screen aufmachen und dann mit ClipBlit die Daten direkt reinkopieren, ohne erst die Daten zu konvertieren?

Also, ich hab ein Speicherbereich der dann so einfach nur noch kopiert werden braucht?

Aber WritePixelArray macht da wohl nicht mit. Der hat ja vorgegebene Formate wie z.b. halt das RGB. BGR hab ich da nicht gefunden.



Alles nicht so einfach, vorallem wenn man fast kein Englisch kann und die AutoDocs quasi mit einem Wörterbuch "dekodiert". :lach:


Aber gestern das Erfolgserlebniss mit WritePixelArray was schon was besonderes. War schon schneller als meine WritePixelRGB Orgie. :D :D
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

08.03.2005, 13:01 Uhr

Ralf27
Posts: 2779
Nutzer
Also, wie mach ich am beste ein Screen auf mit einer BGR-Bitmap? Wenn ich das richtig gelesen habe, dann geht das nicht mit OpenScreenTagList, oder doch? (PS: Mein Englisch ist sau mies)

Könnte jemand kurz aufzeigen wie ich so ein Screen aufmache, die Daten reinkopiere und dann wieder zu mache? Ich wäre da euch sehr dankbar.
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

08.03.2005, 19:06 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von Ralf27:
Also, wie mach ich am beste ein Screen auf mit einer BGR-Bitmap? Wenn ich das richtig gelesen habe, dann geht das nicht mit OpenScreenTagList, oder doch? (PS: Mein Englisch ist sau mies)

Die Empfehlung lautete, eine BitMap anzulegen, und keinen Screen.
Man kann zwar auch Screens mit einer vorher angelegten BitMap erzeugen, aber nicht jede Grafikkarte unterstützt jedes Pixelformat.

mfg
--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

08.03.2005, 19:58 Uhr

Ralf27
Posts: 2779
Nutzer
Hm, ich hab auch Probleme mit dem WritePixelArray8-Befehl aus der graphics. Ich weis nicht wie ich tmprp aufbauen soll.
Ich hab sogar mal Spaßhalber einen ganzen neuen Screen mit Fenster aufgebaut mit genau denn Daten vom 1, aber dennoch läuft es nicht so wie es soll.
Ich versteh da auch die AutoDocs nicht. Wie genau muß denn tmprp aufgebaut sein?
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

08.03.2005, 20:08 Uhr

bubblebobble
Posts: 707
Nutzer
Konvertiere die Daten VORHER im RAM, und dann nutze
die normalen Funktionen. Das umkrempeln der Daten
wird sehr schnell sein, das ist also durchaus vertretbar.
Ausserdem ist das sehr einfach, und besser als an irgendwelchen
Pixelformaten der Bitmaps zu pfuschen.
--
Thilo Köhler, Author von:
HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, UDM, TKPlayer, TKUnpacker
Homepage: http://www.hd-rec.de



[ - Antworten - Zitieren - Direktlink - ]

08.03.2005, 20:47 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von Ralf27:
Hm, ich hab auch Probleme mit dem WritePixelArray8-Befehl aus der graphics. Ich weis nicht wie ich tmprp aufbauen soll.
Ich hab sogar mal Spaßhalber einen ganzen neuen Screen mit Fenster aufgebaut mit genau denn Daten vom 1, aber dennoch läuft es nicht so wie es soll.
Ich versteh da auch die AutoDocs nicht. Wie genau muß denn tmprp aufgebaut sein?

Ein RastPort, der auf eine BitMap zeigt, die die gleiche Breite (auf Vielfaches von 16 aufgerundet?) wie die ZielBitMap hat. Es reicht, wenn er nur eine Zeile hoch ist.
Ich habe folgenden Codeschnippsel mal aus einem anderen Thread kopiert (und abgeändert, aber ohne Gewähr, kann hier nix testen):
[code]
struct RastPort rpTemp;
struct BitMap *tempBitMap;

tempBitMap = AllocBitMap(width, 1, 8, 0, NULL);
InitRastPort(&rpTemp);
rpTemp.Layer = NULL;
rpTemp.BitMap = tempBitMap;
WritePixelArray8(targetRP, 0, 0, width, height, data, &rpTemp);

FreeBitMap(tempBitMap);
[/quote]

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.

[ Dieser Beitrag wurde von Holger am 08.03.2005 editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

08.03.2005, 20:52 Uhr

Ralf27
Posts: 2779
Nutzer
Zitat:
Original von bubblebobble:
Konvertiere die Daten VORHER im RAM, und dann nutze
die normalen Funktionen. Das umkrempeln der Daten
wird sehr schnell sein, das ist also durchaus vertretbar.
Ausserdem ist das sehr einfach, und besser als an irgendwelchen
Pixelformaten der Bitmaps zu pfuschen.
--
Thilo Köhler, Author von:
HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, UDM, TKPlayer, TKUnpacker
Homepage: http://www.hd-rec.de



Ich hab eben das Programm so umgeschrieben das die Daten vorher gedreht werden und, was soll ich tippen, es geht wirklich sehr schnell.
Sogar das laden der Daten von der Festplatte dauert länger als das Drehn der Daten im Speicher.

PS: Ich progge das ganze in Basic, aber sogar bei 800*600 geht das im Bruchteil einer Sekunde.

Bald ist die Version 0.3 fertig.

Nur noch das WritePixelArray8-Verstehn-Problem.

Hab aber eben das Beispiel gefunden :D

Ich teste es nachher mal. Eigentlich hab ich es ja verstanden, nur mal sehn ob ich wirklich verstanden habe. :lach:
--
http://www.alternativercomputerclub.de.vu

[ Dieser Beitrag wurde von Ralf27 am 08.03.2005 editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

08.03.2005, 22:05 Uhr

Ralf27
Posts: 2779
Nutzer
Hm, AllocBitmap gibt es erst ab V39. Also, wenn ich das Problem mit WriteChunkyPixel (V40, bzw. OS3.1) das es nur ab OS3.1 läuft, dann komme ich mit AllocBitMap auch nicht sehr viel weiter. V39 ist wohl OS3.0, oder?

Ich kann alternativ auch AllocRaster benutzen? Natürlich x Planes mal. Hm, recht aufwendig.


Wenn ich jetzt einmal so eine 2. Bitmap mit allem drum und dran aufbaue die genau die gleiche Dimensionen (Breite, Höhe, Tiefe) hat wie das Orginal, kann ich dann auch kleinere Bildbereich mit dieser mit WritePixelArray8 benutzen? (Ich vermute ja eigentlich schon. :D , aber sicher ist wenn ich hier nochmal Nachfrage)



Mein Programm läuft bis jetzt ab OS3.1 recht gut. Ich hab auch alle Probleme soweit beseitigt. Jetzt halt "nur" noch WritePixelArray8 einbauen und das ganze so machen das es auch ab OS2.04 läuft und fertig.
Ich bin auch am überlegen ob ich es auch soweiter machen soll das es ab OS1.2 läuft, aber das wäre dann wohl doch zu viel des guten. Denn wenn ich das richtig gesehn habe, dann gibt es WritePixelArray8 nicht bei OS1.2, sondern erst ab OS2.04. Vermutlich beleibt dann das Programm ab OS2.04.

Aber mal so eine Frage in die Runde:
Wie würde man bei OS1.2 oder OS1.3 eine Bild-Array mit Daten füllen?
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

08.03.2005, 22:37 Uhr

thomas
Posts: 7717
Nutzer

Zitat:
Hm, AllocBitmap gibt es erst ab V39. Also, wenn ich das Problem mit WriteChunkyPixel (V40, bzw. OS3.1) das es nur ab OS3.1 läuft, dann komme ich mit AllocBitMap auch nicht sehr viel weiter. V39 ist wohl OS3.0, oder?

Nur zur Information: Cybergraphics braucht auch mindestens Kickstart 3.0. Du kannst also den ganzen Teil mit der Grafikkartenunterstützung gegen Kick 3.0 absichern und alle Funktionen benutzen, die du willst (außer WriteChunkyPixel).

Unter AGA/ECS/OCS kannst du ohnehin keine Cybergraphics-Funktionen benutzen, selbst mit Kick 3.1. CGX läuft nur mit Grafikkarte.

Gruß Thomas

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

[ - Antworten - Zitieren - Direktlink - ]

08.03.2005, 22:50 Uhr

Ralf27
Posts: 2779
Nutzer
Zitat:
Original von thomas:

Zitat:
Hm, AllocBitmap gibt es erst ab V39. Also, wenn ich das Problem mit WriteChunkyPixel (V40, bzw. OS3.1) das es nur ab OS3.1 läuft, dann komme ich mit AllocBitMap auch nicht sehr viel weiter. V39 ist wohl OS3.0, oder?

Nur zur Information: Cybergraphics braucht auch mindestens Kickstart 3.0. Du kannst also den ganzen Teil mit der Grafikkartenunterstützung gegen Kick 3.0 absichern und alle Funktionen benutzen, die du willst (außer WriteChunkyPixel).

Unter AGA/ECS/OCS kannst du ohnehin keine Cybergraphics-Funktionen benutzen, selbst mit Kick 3.1. CGX läuft nur mit Grafikkarte.

Gruß Thomas

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



Ich hab mein Programm so gestaltet das es auf cybergraphics prüft. Wenn es nicht vorhanden ist, dann wird es auch nicht benutzt. Auch ohne Cybergraphics läuft mein Programm. Die Ausgabe über AGA läuft auch recht schnell.

Ich werde einfach versuchen das Programm so zu schreiben das es ab OS2.04 läuft.

Das Programm entwickel ich übrigens auf einem Rechner *ohne* Grafikkarte und somit auch ohne cybergraphics. Zum Testen schick ich es über das Netzwerk an meinen großen Rechner.
PS: Ich war auch erstaunt wie schnell man auch Bilder über Netzwerk anschauen kann, wenn das Bild nicht komplett rübergeladen wird sondern nur das was auch wirklich benötigt wird.

Heute Abend stelle ich V0.3 online. Hat noch einige Fehler und läuft erst ab OS3.1 (oder OS2.04, kann man im prefs einstellen, dann halt ohne WriteChunkyPixel), aber bis jetzt nicht schlecht.
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

09.03.2005, 18:59 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von Ralf27:
Hm, AllocBitmap gibt es erst ab V39. Also, wenn ich das Problem mit WriteChunkyPixel (V40, bzw. OS3.1) das es nur ab OS3.1 läuft, dann komme ich mit AllocBitMap auch nicht sehr viel weiter. V39 ist wohl OS3.0, oder?

Ich kann alternativ auch AllocRaster benutzen? Natürlich x Planes mal. Hm, recht aufwendig.

Wenn Du sowieso schon Fallunterscheidungen machst, also an einer Stelle bist, die nur unter OS2.x und nicht unter OS3.x benutzt wird, kannst Du auch davon ausgehen, daß ein beliebiger Speicherbereich im Chip-RAM ok ist. Und daß man bei kleineren Planes auch einen zusammengefaßten Speicherbereich belegen kann.
Genaugenommen _mußt_ Du sogar entsprechende Annahmen über OS-Interna machen, sonst könntest Du die BitMap gar nicht initialisieren.
Zitat:
Ich bin auch am überlegen ob ich es auch soweiter machen soll das es ab OS1.2 läuft, aber das wäre dann wohl doch zu viel des guten.
Das wäre wirklich zuviel.
Zitat:
Aber mal so eine Frage in die Runde:
Wie würde man bei OS1.2 oder OS1.3 eine Bild-Array mit Daten füllen?

Die Daten noch vor dem Kompilieren nach Planar konvertieren und durch ein Programm jagen, das den entsprechenden Code generiert.

mfg
--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

09.03.2005, 19:17 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Hi Ralf, wenn du auch auf AGA&Co Support Wert legst, so nutze einfach für dein Anliegen die guigfx.library, die hat AFAIK Alles was du brauchst. Ansonsten sage ich dir, pfeif auf den Non-Gfx-Card Support, da hast du nur Ärger mit! Ansonsten würde ich auch nicht so darauf schauen, dass es auch mit OS2.x läuft, da das so oder so kaum jemand nutzen tut (denke ich). AGA & OS2.x in Ehren, aber irgendwie muss man auch weiterdenken!

[ - Antworten - Zitieren - Direktlink - ]

09.03.2005, 22:00 Uhr

Ralf27
Posts: 2779
Nutzer
Zitat:
Original von DariusBrewka:
Hi Ralf, wenn du auch auf AGA&Co Support Wert legst, so nutze einfach für dein Anliegen die guigfx.library, die hat AFAIK Alles was du brauchst. Ansonsten sage ich dir, pfeif auf den Non-Gfx-Card Support, da hast du nur Ärger mit! Ansonsten würde ich auch nicht so darauf schauen, dass es auch mit OS2.x läuft, da das so oder so kaum jemand nutzen tut (denke ich). AGA & OS2.x in Ehren, aber irgendwie muss man auch weiterdenken!


Nun, es ist schon klar das man recht viele unterschiedliche Routinen braucht zum anzeigen, aber alle sind bereits eingebaut und laufen recht gut. Mein Programm rennt in der Version 0.3 schon recht schnell, aber die aktuelle Version 0.4 ist jetzt noch schneller geworden.

Zur Zeit ist sogar noch Code drin der wohl auch unter OS1.3 laufen würde, aber denn werde ich so langsam rauswerfen und das Programm so gestalten das es ab OS2.04 läuft.

Das einzige saudumme Problem ist noch WriteChunkyPixel(OS3.1)<->WritePixelArray8 (OS2.04). Bau ich wohl ab 0.5 ein.
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


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


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