Grafikmaße ermitteln, ohne die Grafik zu laden
Übersicht

![]() |
koril-kBetreff: Grafikmaße ermitteln, ohne die Grafik zu laden |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie kann ich die Breite und Höhe einer Grafik ermitteln, ohne die ganze Grafik zu laden? Hintergrund: Meine Funktion, die LoadAnimImage gleicht, soll zu einer vorgegebenen Grafik (in der mehrere gleichbreite Teilbilder gespeichert sind) mit Hilfe der Breite der Teilbilder (die ihr bekannt ist) und mit der Gesamtbreite der Grafik (die herauszufinden ich mich schwer tue) die Anzahl der Teilbilder der Grafik berechnen. Natürlich könnte ich die Grafik laden und dann die ImageWidth-Funktion verwenden und dann die Grafik (mittels Null-Setzen) wieder löschen, aber das wäre ja irrwitziger Mehraufwand. In den Windows-Dateieigenschaften gibt es eine Registerkarte "Details", wo Breite und Höhe einer Grafik gespeichert sind. Wie komme ich da ran? | ||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dafür musst du das Format verstehen, dann kannst du das aus der Datei auslesen. Nachschlagen z.B. Windows Bitmap (wiki), ggf. unter www.wotsit.org/ und für jedes Format implementieren. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
ComNik |
![]() Antworten mit Zitat ![]() |
---|---|---|
[EDIT:]Erst lesen, dann posten...[/EDIT] | ||
WIP: Vorx.Engine |
- Zuletzt bearbeitet von ComNik am Fr, Jul 02, 2010 23:45, insgesamt einmal bearbeitet
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du könntest auch das bild durch sein 'getiletes' Pendant ersetzen, und da BMax aus Pixmaps laden kann wäre das auch recht flott.
Beispiel: Code: [AUSKLAPPEN] SuperStrict
Local img:TImage = LoadImage("DateideinerWahl.png") Local x:Int = img.width DebugLog "WIDTH: " + x img = LoadAnimImage(img.pixmaps[0] , x / 2 , 32 , 0 , 2) 'laden wir das bild mal als 2 Tiles x = img.width DebugLog "WIDTH after loadanimimage: " + x Theoretischerweise sollte die alte Imagedatei automatisch aus dem Speicher verbannt werden, nachgeprüft habe ich das allerdings nicht. |
||
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 |
![]() |
koril-k |
![]() Antworten mit Zitat ![]() |
---|---|---|
@xeres: Das Bitmap-Dateiformat sieht sehr simpel aus, allerdings scheint der Aufbau von PNG- und JPG-Dateien (die ich hauptsächlich nutze) eine ausführliche Einarbeitung zu benötigen, was mir mein Problem nicht wert ist.
@ComNik: Genau das habe ich in meinem Post als Lösung ausgeschlossen, weil das Laden und Löschen einer Grafik, nur um seine Maße zu ermitteln, ein zu drastischer Effizienzverlust ist. @BladeRunner: Deine Lösung würde mir helfen, wenn ich die Grafik auch sogleich benötigen würde. In meinem speziellen Problem bereite ich aber lediglich Informationen für die Grafiken vor (z.B. deren Teilbilder-Anzahl) und mit diesen Infos wird schon gearbeitet, bevor (und nachdem) die Grafik im Speicher war/ist. Der Grund dafür ist, dass ich aus Speichersparsamkeit Grafiken dynamisch laden (und freigeben) möchte, wenn sie benötigt werden. Ich werde wohl meinen Programmfluss etwas abändern, sodass ich ohne die Information über die Anzahl der Teilbilder einer Grafik auskomme, solange diese nicht geladen ist und wenn ich die Grafik (und Informationen) dann tatsächlich brauche, werde ich sie nach BladeRunners Variante laden. Danke für die Hilfe! |
||
![]() |
DaysShadow |
![]() Antworten mit Zitat ![]() |
---|---|---|
Man nehme diese Seite: http://mindprod.com/jgloss/png.html, öffne BlitzMax und wendet an was man liest ![]() BlitzMax: [AUSKLAPPEN] Function GetWidthPNG:Int( file:String ) |
||
Blessed is the mind too small for doubt |
- Zuletzt bearbeitet von DaysShadow am Fr, Jul 02, 2010 23:04, insgesamt einmal bearbeitet
FWeinbehemals "ich" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Oder man sucht hier im Forum und findet einen Eintrag im BB Code Archive:https://www.blitzforum.de/foru...hp?t=30177 sollte recht einfach in BMax Übertragbar sein.
MfG ich |
||
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group