DEUTSCHE VERSION |
|
Links | | | Forums | | | Comments | | | Report news |
Chat | | | Polls | | | Newsticker | | | Archive |
amiga-news.de Forum > Programmierung > BitMap Breite | [ - Search - New posts - Register - Login - ] |
-1- | [ - Post reply - ] |
2002-10-22, 08:25 h Micha1701 Posts: 938 User |
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) -- Micha Look at my HP: http://www.lanser-online.de.vu [ - Answer - Quote - Direct link - ] |
2002-10-22, 09:33 h thomas Posts: 7718 User |
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/ [ - Answer - Quote - Direct link - ] |
2002-10-22, 10:08 h Micha1701 Posts: 938 User |
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... -- Micha Look at my HP: http://www.lanser-online.de.vu [ - Answer - Quote - Direct link - ] |
2002-10-22, 11:20 h thomas Posts: 7718 User |
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/ [ - Answer - Quote - Direct link - ] |
2002-10-22, 11:40 h Micha1701 Posts: 938 User |
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? -- Micha Look at my HP: http://www.lanser-online.de.vu [ - Answer - Quote - Direct link - ] |
2002-10-22, 12:46 h Holger Posts: 8116 User |
Zitat: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. [ - Answer - Quote - Direct link - ] |
2002-10-22, 14:04 h AC-FoX Posts: 35 User |
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 [ - Answer - Quote - Direct link - ] |
2002-10-22, 14:48 h Micha1701 Posts: 938 User |
Zitat: 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. ] [ - Answer - Quote - Direct link - ] |
2002-10-22, 15:10 h thomas Posts: 7718 User |
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/ [ - Answer - Quote - Direct link - ] |
2002-10-22, 15:23 h Micha1701 Posts: 938 User |
Zitat: 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... -- Micha Look at my HP: http://www.lanser-online.de.vu [ - Answer - Quote - Direct link - ] |
-1- | [ - Post reply - ] |
amiga-news.de Forum > Programmierung > BitMap Breite | [ - Search - New posts - Register - Login - ] |
Masthead |
Privacy policy |
Netiquette |
Advertising |
Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved. |