Riesen-BMP (für Karte)

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Iguan

Betreff: Riesen-BMP (für Karte)

BeitragFr, Dez 15, 2006 11:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo!

Ich habe viele sehr grosse Bilder (Kartenausschnitte der Erde). Nun möchte ich gerne ein Programm schreiben, welches die einzelnen Stücke zusammensetzt und dann in ein Riesen-BMP speichert.
Dass ab einer bestimmten Bildgrösse schluss ist mit BB, das weis ich schon.
BB bringt es gerade noch knapp fertig, ein Einzelstück der Karte zu laden und zu zeichnen.
Nun, ist es möglich irgendwie die Startposition im Riesenbild anzugeben, von wo aus die Daten des Einzelstückes reingeschrieben werden?
Ich möchte das so erstellte Riesen-Bild NICHT wieder in BB laden... ist ja eh zu gross...
Das ganze würde mir eine menge Photoshop-Arbeit ersparen!!

Ist das irgendwie Möglich?
Oder kennt ihr da eine andere Lösung?


MfG


Iguan

BladeRunner

Moderator

BeitragFr, Dez 15, 2006 15:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Um welche Bildgrösse dreht es sich ?
(Also ein Teil und das gesamte ?)
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Iguan

BeitragFr, Dez 15, 2006 15:20
Antworten mit Zitat
Benutzer-Profile anzeigen
also ein einzelnes Teil hat die Masse: 3648x2736 Pixel
und davon möchte ich waagrecht ca. 50 und senkrecht auch ca. 50
aneinandersetzen...

BladeRunner

Moderator

BeitragFr, Dez 15, 2006 15:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn ich mich nicht verrechnet habe willst Du eine 93 Gigabyte große Bitmap erstellen. Es dürfte Dich nicht verwundern zu erfahren dass das den Graphikkartenspeicher selbst guter Karten ein klitzekleines bisschen überfordert.

Kurzum: Vergiss es - such Dir eine Lösung die Bilder in Teilen zur Laufzeit einzuladen und zusammen zu pasten. Die Datei wäre zu groß um sie zu öffnen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Iguan

BeitragFr, Dez 15, 2006 15:54
Antworten mit Zitat
Benutzer-Profile anzeigen
es könnte ja auch ein grosses JPG sein...
und wie gesagt, ich brauche schlussendlich nur die Datei... ich möchte sie NICHT in BB laden und zeichnen!

Ist das immer noch unmöglich?

(kann man nicht irgendwie angeben, von welcher Position aus in das RiesenJPG geschrieben wird...?)

PS: ich benutze folgende function um die Datei als JPG zu speichern:

Code: [AUSKLAPPEN]

Function SaveImageAsJPEG(filename$, image, quality = 75)
   Local i, x, y, width, height
   Local buffer, bank
   Local c
   Local result
   
   width = ImageWidth(image)
   height = ImageHeight(image)
   buffer = ImageBuffer(image)
   
   bank = CreateBank(width * height * 3 + 1)
   
   LockBuffer buffer
   For y = 0 To height - 1
      For x = 0 To width - 1
         c = ReadPixelFast(x, y, buffer)
         c = ((c And $FF) Shl 16) Or (c And $FF00) Or ((c And $FF0000) Shr 16)

         PokeInt(bank, i, c)
         
         i = i + 3
      Next
   Next
   UnlockBuffer buffer
   
   result = SaveJPEGFile(filename$, bank, quality, width, height)
   
   FreeBank(bank)
   
   Return result
End Function

PowerProgrammer

BeitragFr, Dez 15, 2006 16:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Im Arbeitsspeicher sind Bilder nicht komprimiert.
Wofür benötigst du das Überhaupt? Ist das nicht übertrieben?
Du müsstest dich wahrscheinlich selber mit dem BMP-Dateiformat auseinandersetzen.

Außerdem ist auch dieses Dateiformat wohl nicht unendlich, oder?
www.xairro.com Alles für Webmaster und Programmierer! Es gibt mehr als bloß einen Counter!

TheShadow

Moderator

BeitragFr, Dez 15, 2006 16:29
Antworten mit Zitat
Benutzer-Profile anzeigen
he... das sind nur 69,7GB an Daten (wäre es 24-bit-bmp)

3648x50 = 182400
und BMP Datei kann max 65535 pixel breit/hoch sein...

wie du siehst musst du 2. Sachen machen:

1) Eigenes Format erfinden oder ein Format finden das >65535 pixel haben kann (ich kenne jetzt keins). Es soll wohl auch komprimiert sein - (oder willst du neue Festplatte dafür kaufen?). Sowohl BMP als auch PNG scheiden aus (PNG ist recht langsam) - JPG ist dafür GUT - aber ob es so groß sein darf k.A. evtl. TIF oder sowas...

2) Dann musst du "nur" einen eigenen Writer für das format schreiben - da ich vermute, dass es keinen Writer gibt der solche Dateien schreiben kann...
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2
 

Dreamora

BeitragFr, Dez 15, 2006 16:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Doch ist es, solange du die Seitenlänge noch im verlangten Datenformat darstellen kannst Smile

Auch gibt es in 2D kein Problem mit der Grösse der Bilder im VRAM. Bilder nutzen ihn nicht. (nur Texturen)

Allerdings ändert das nix daran, dass das Bild im RAM dennoch Höhe * Breite * Farbtiefe gross ist, also 93GB RAM brauchen würde.
Also egal was du machst, da wirst du dir wohl was intelligenteres einfallen lassen müssen und zwar allgemein, denn selbst mit JPG reden wir hier noch über 10GB Daten also so ziemlich garnix realistisch fürchte ich.

Einfachster Ansatz: Wird der Detailgrad der Originalbilder überhaupt gebraucht oder könnte man sie auf 1/2 seitenlänge oder gar 1/4 verkleinern ohne grössere Konsequenzen für die Endnutzung?
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Triton

BeitragFr, Dez 15, 2006 16:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
es könnte ja auch ein grosses JPG sein...

Nein. Wenn du das Bild anzeigen willst, muss es ja trotzdem im Grafikkartenspeicher
vorliegen.

Und zu 65535 und bmp: ich konnte soeben mit Paint ein viel größeres Bild erstellen (zumindest in der Breite - Höhe hab ich bei 5 px gelassen..). Mit Irfanview kann man das nicht mehr laden, aber Paint selbst gibt es problemlos wieder.
Coding: silizium-net.de | Portfolio: Triton.ch.vu

Iguan

BeitragFr, Dez 15, 2006 17:49
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, dann lass ichs halt bleiben...
habe eben ein programm geschrieben, dass von www.maps.google.com
selbständig scrollt und kartenausschnitte herausnimmt.
Wollte daraus eine grosse Karte für eine Reise erstellen.

DerHase

BeitragFr, Dez 15, 2006 17:51
Antworten mit Zitat
Benutzer-Profile anzeigen
So eine gr0ße Karte wäre sehr unpraktisch auf einer Reise imho.
Play Satyr!
 

Dreamora

BeitragSa, Dez 16, 2006 19:38
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm net umbedingt. Wenn du sie ausdruckst, solltest du wegen der Grösse bei entsprechendem Material damit um den Erdball fliegen können Wink

Aber Mal ernsthaft: Wenn du damit eine Karte machen willst für Reisen und so, würde ich versuchen die Daten zu reduzieren, so das nur relevante Daten drauf sind und wenn möglich das dann auf Vektorgrafikniveau reduzieren. Dadurch wäre das ganze vermutlich viel einfacher möglich.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Triton

BeitragSa, Dez 16, 2006 20:05
Antworten mit Zitat
Benutzer-Profile anzeigen
...oder einen Straßenatlas kaufen. Rolling Eyes
Coding: silizium-net.de | Portfolio: Triton.ch.vu

DAK

BeitragMi, Dez 20, 2006 21:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Bild wäre dann laut meiner Rechnung, meiner Bildschirmauflösung (1024*768) und meinem 17" Bildschirm ~3807422 km² groß. Das ist ein 134tel der Erdoberfläche... Viel Spaß beim Drucken...

Edit: Hab grad gelesen das dus doch nicht versuchen willst. Weise Entscheidung
Gewinner der 6. und der 68. BlitzCodeCompo

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group