2-dimensionale Bank
Übersicht

![]() |
TheProgrammerBetreff: 2-dimensionale Bank |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi.
Ich wollte mal fragen, ob man eine 2-dimensinale Bank erstellen kann. Ich möchte damit Images speichern. Wenn es keine 2-dimensionalen Banks (oder wie der Plural auch immer lautet ![]() Images in einer Bank zu speichern? Ich hoffe, die Frage hat nicht schonmal jemand gestellt... PS: Wie kann man ermitteln, wie viele Byte man für ein bestimmtes Image brauch? |
||
aktuelles Projekt: The last day of human being |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
2D Banks gibt es nicht.
Aber man kann sie auch einfach umrechnen Bank mit der Grösse MaxX* MaxY*Bytes danach einfach die Daten an der Position y * MaxX + x auslesen bzw. einschreiben. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
TheProgrammer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke.
Und wie kann ich die Größe (Bytes) ausrechnen? |
||
aktuelles Projekt: The last day of human being |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Float: 4 Bytes
Int: 4 Bytes String: Anzahl Zeichen Bytes Und 32bit farben = 4 byte pro pixel |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
David |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi!
Quasi: Code: [AUSKLAPPEN] PicSize = ( PicWidth * PicHeight * ( Bpp shr 3 ) ); grüße |
||
http://bl4ckd0g.funpic.de |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
jo oder einfach BPP / 8 da 8 bit = 1 byte ![]() |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
TheProgrammer |
![]() Antworten mit Zitat ![]() |
---|---|---|
so. Ich hab das jetzt so gemacht:
Code: [AUSKLAPPEN] Function LoadMultiImage(img$) image = LoadImage(img$) If image = 0 Then RuntimeError("Image existiert nicht!") If ImageWidth(image) > 65535 Or ImageHeight(image) > 65535 Then RuntimeError("Image ist zu groß!") bank = CreateBank((ImageWidth(image)*2+ImageHeight(image)*2)+(ImageWidth(image)*ImageHeight(image))*3) pos = 0 SetBuffer ImageBuffer(image) LockBuffer ImageBuffer(image) For Y = 0 To ImageHeight(image) For X = 0 To ImageWidth(image) pixel = ReadPixelFast(X,Y) r=(pixel And $FF0000)/$10000 g=(pixel And $FF00)/$100 b=pixel And $FF PokeShort bank,pos,X pos = pos + 2 PokeShort bank,pos,Y pos = pos + 2 PokeByte bank,pos,r pos = pos + 1 PokeByte bank,pos,g pos = pos + 1 PokeByte bank,pos,b pos = pos + 1 Next Next UnlockBuffer ImageBuffer(image) SetBuffer BackBuffer() FreeImage image Return bank End Function Doch dann kommt der Fehler "Offset out of range". |
||
aktuelles Projekt: The last day of human being |
David |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi!
Code: [AUSKLAPPEN] CreateBank((ImageWidth(image)*2+ImageHeight(image)*2)+(ImageWidth(image)*ImageHeight(image))*3) Ist das nicht ein wenig zu viel des Guten?? Width * Height * 3 reicht, bei einem 24!! bit Image, bei 32 Bit brauchst du 4 Byte pro Pixel, da der Alphakanal noch hinzukommt! Desweiteren würde ich kein Image laden sondern direkt aus der Datei lesen, immer "n" Bytes und diese dann in dein Bank schieben. Edit: Bzw. mit der image Variante kannst du diverse Kompressions- und Headerdaten-Fehler umgehen, ist also evtl doch nich so übel, da du dir ja massig Arbeit sparst! grüße |
||
http://bl4ckd0g.funpic.de |
- Zuletzt bearbeitet von David am Fr, Sep 17, 2004 10:10, insgesamt einmal bearbeitet
![]() |
TheProgrammer |
![]() Antworten mit Zitat ![]() |
---|---|---|
äh...ja....
Könnt ihr vieleicht mal n' Beispiel zeigen, wo in einer Funktion ein image in einer Bank gespeichert wird? |
||
aktuelles Projekt: The last day of human being |
David |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi!
Der Ansatz war ja schon ganz gut! Allerdings brauchst die die Koordinaten nicht mitzuspeichern, du kannst die Pixel aus deinem 1D Array ja recht leicht in den Pixelraster zurückrechnen! Deine momentane Lösung funktioniert übrigens nicht mit 32 Bit Bildern, da der Alphakanal verloren geht. Vielleicht wäre eine, nicht ganz so einfache Lösung angesagt! Den Überlauf bekommst du, weil du die Koordinaten als Short (2 byte) speicherst, also vorher zu wenig Platz im Bank reservierst. grüße P.S.: Sorry das ich nicht mit einem Beispiel dienen kann, da ich hier unter Linux arbeite. |
||
http://bl4ckd0g.funpic.de |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
www.mitglied.lycos.de/theverte.../Banks.doc
Hier sind 2 dimensionale Arrays/Banks beschrieben. mfg olli |
||
vertex.dreamfall.at | GitHub |
David |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi!
Mal ganz anders gefragt, was bezweckst du mit dem Haufen Bytes in einem Bank?? grüße |
||
http://bl4ckd0g.funpic.de |
![]() |
TheShadowModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
in der hilfe unter createbank steht was zu 2d-banks und auch formeln etc... | ||
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group