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

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

-1- [ - Beitrag schreiben - ]

22.10.2002, 08:25 Uhr

Micha1701
Posts: 938
Nutzer
Hi!

Sagt mal, muß die Breite einer Bitmap immer durch 16 teilbar sein?

Kann man keine Bitmap mit einer Breite von 100 erstellen?

Das ist nämlich zur Zeit so...

Ich will eine Bitmap mit einer Breite von 100 bekomme aber eine mit einer Breite von 112. Bin schon an einer meiner Funktionen verzweifelt, weil immer nur Müll rauskam.... Bis ich bemerkt habe, daß die Bitmapdaten sich "verschoben" haben...

Ich benutze übrigends CGX4 und P96-V2...

Oder liegt es vielleicht an den Tags die ich mitgebe?

BMF_MINPLANES|BMF_SPECIALFMT|SHIFT_PIXFMT(Pixelformat)


--
:boing: Micha :boing:

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



[ - Antworten - Zitieren - Direktlink - ]

22.10.2002, 09:33 Uhr

thomas
Posts: 7718
Nutzer

Natürlich muß die BitMap durch 16 teilbar sein. Aber das hat dich nicht zu interressieren. Gerade bei RTG-Systemen darfst du nicht direkt auf die BitMap zugreifen. Wenn es unbedingt sein muß, mußt du die BitMap vorher mit LockBitMapTags() blockieren. Die Funktion gibt dir Auskunft, wie viele Bytes eine Zeile hat und aus wievielen Bytes ein Pixel besteht.

Ich kann nur immer wieder empfehlen, sich mal die Dokumentationen (AutoDocs, RKRM) durchzulesen, bevor man irgendwelche Funktionen benutzt. Oder Funktionen nachprogrammiert, die es schon längst gibt.

Gruß Thomas

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

[ - Antworten - Zitieren - Direktlink - ]

22.10.2002, 10:08 Uhr

Micha1701
Posts: 938
Nutzer
Danke....

Hab die Stelle in den Dokus nicht gefunden wo steht, daß die Bitmap immer durch 16 teilbar gemacht wird (also WORD-align). Ist eigentlich auch egal, daß stimmt, aber wenn ich die tatsächlich locke und darauf zugreife ist die tatsächliche Breite dann doch sehr wichtig...
--
:boing: Micha :boing:

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



[ - Antworten - Zitieren - Direktlink - ]

22.10.2002, 11:20 Uhr

thomas
Posts: 7718
Nutzer

Das mit der 16 müßte bei AllocBitMap() stehen.

Die AutoDocs von CGX haben am Anfang einen sehr ausführlichen Bericht über BitMaps. Wenn ich mich nicht irre steht da auch, daß man keine Annahmen über Alignment machen darf. Es kann durchaus Grafikkarten geben, bei denen auf 32 gerundet werden muß.

Lies dir LockBitMapTags() durch, speziell LBMI_BYTESPERPIX und LBMI_PYTESPERROW.

Gruß Thomas

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

[ - Antworten - Zitieren - Direktlink - ]

22.10.2002, 11:40 Uhr

Micha1701
Posts: 938
Nutzer
Und wie kann man dann generell z.B. Bilder in eine Bitmap laden, wenn man mit jedem alignment rechnen muß? Muß ich deswegen alle Daten so anlegen, daß eine Zeile durch 32 teilbar ist, damit ich immer richtig liege?

Zur Zeit mache ich das so:

Puffer anlegen, Datei einlesen, Bitmap locken, Puffer nach Bitmap kopieren -> fertig

Muß man das dann so machen:

Puffer anlegen, Datei einlesen, Attribute der Bitmap abfragen, Bitmap locken, erste Zeile des Puffers in die erste Zeile der Bitmap, zweite Zeile des Puffers in die zweite Zeile der Bitmap.....
Das dauert ja ewig....

Und mit Masken kann ich dann dennoch nicht arbeiten.... Weil die genauso sein müssen wie die Bitmap... Na das würde ja arbeit geben....

Was ist dann mit Bitmaps die nur 6 Pixel breit aber dafür 800 Pixel hoch sind? Soll ich dann 10 oder 26 Pixel - und somit diese ganzen unnötigen bytes - verbraten?


--
:boing: Micha :boing:

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



[ - Antworten - Zitieren - Direktlink - ]

22.10.2002, 12:46 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von Micha1701:
Puffer anlegen, Datei einlesen, Attribute der Bitmap abfragen, Bitmap locken, erste Zeile des Puffers in die erste Zeile der Bitmap, zweite Zeile des Puffers in die zweite Zeile der Bitmap.....
Das dauert ja ewig....

Die Datenmenge ändert sich überhaupt nicht, egal ob Du sie zeilenweise oder komplett kopierst. Zumal Deine Beschreibung eher so klingt, als ob Du sie ohnehin pixelweise kopierst.
Du solltest Dir mal die für das Kopieren zuständigen Grafikroutinen ansehen, anstatt die BitMap zu locken (wovon in der Doku ausdrücklich abgeraten wird) und das Rad neu zu erfinden.

mfg

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

[ - Antworten - Zitieren - Direktlink - ]

22.10.2002, 14:04 Uhr

AC-FoX
Posts: 35
Nutzer
Zum Kopieren aus einem Buffer in eine BitMap nimmst du dir den Startpointer der Bitmap und die BytesPerRow Angabe, die dir das System mitteilt. Dann kopierst du aus deinem Buffer jede Zeile einzeln. Nach dem Kopieren der Zeile addierst du auf den BitMap-Startpointer die BytesPerRow und hast die Zieladdresse für den Anfang der zweiten Zeile.
Die BytesPerRow Angabe ist extrem wichtig. Sie ist in etwa so definiert:
BytesPerRow ist die Anzahl der Bytes, die man addieren muß, um von einem Bildpunkt zum darunter liegenden zu kommen.
Wenn du jetzt eine 100 Pixel breite Bitmap anlegst, diese aber intern auf 112 Breite läuft (wegen WORD Breite), dann wird dir auch 112 als BPR zurückgegeben. Die restlichen 12 Pixel verschwendest nicht du in deinem Buffer, sondern die werden im Grafikspeicher frei gelassen. Ein weiteres Beispiel für BPR ist Interleaved Grafik auf den Customchips. Da folgt auf eine Zeile einer BitMap erstmal je eine Zeile der anderen BitMaps. Die BPR Angabe ist dann ein Vielfaches der eigentlichen BitMap-Breite.

Grüzi

[ - Antworten - Zitieren - Direktlink - ]

22.10.2002, 14:48 Uhr

Micha1701
Posts: 938
Nutzer
Zitat:
Original von Holger:
Zumal Deine Beschreibung eher so klingt, als ob Du sie ohnehin pixelweise kopierst.
Du solltest Dir mal die für das Kopieren zuständigen Grafikroutinen ansehen, anstatt die BitMap zu locken (wovon in der Doku ausdrücklich abgeraten wird) und das Rad neu zu erfinden.


Ich nehme an Du sprichst von BltBitMap() oder BltBitMapRastPort()?

Die kopieren aber nur von einer Bitmap in eine Bitmap....

Ich will aber von einer Datei in eine Bitmap.... Und wie mach ich das ohne zu locken?

@AC-FOX:

Hmmm.... So hab ich das noch nicht gesehen.... Klingt nicht ganz so schwer ;-)



[ Dieser Beitrag wurde von Micha1701 am 22.10.2002 editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

22.10.2002, 15:10 Uhr

thomas
Posts: 7718
Nutzer

Was denn für eine Datei ? Wenn es eine Bilddatei ist (IFF, JPG, GIF, PNG o.ä.), dann nimm Datatypes zum Laden, da bekommst du Bitmaps.

Gruß Thomas

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

[ - Antworten - Zitieren - Direktlink - ]

22.10.2002, 15:23 Uhr

Micha1701
Posts: 938
Nutzer
Zitat:
Original von thomas:

Was denn für eine Datei ? Wenn es eine Bilddatei ist (IFF, JPG, GIF, PNG o.ä.), dann nimm Datatypes zum Laden, da bekommst du Bitmaps.


Zum schnelleren Laden der Datei (von wegen konvertierung in das benötige Pixelformat), handelt es sich dabei um RGB16-RAW Dateien...

Is also nix mit Datatypes.... Hatte auch nicht vor alles darauf umzustellen...



--
:boing: Micha :boing:

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



[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


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


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