Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

JPG anzeigen, und auf größe vom SCREEN skalieren....

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 24.06.2007, 19:29    Titel: JPG anzeigen, und auf größe vom SCREEN skalieren.... Antworten mit Zitat

.... und das möglichst schnell

es geht darum, dass ich einen kleinen bildviewer für meine schwester schreiben soll.



verfügbare daten: größe vom screen(1024x768), dateiname

das ganze sollte das bild prozentual strecken, also ohne verzerrung vom bild.
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Stormy



Anmeldungsdatum: 10.09.2004
Beiträge: 567
Wohnort: Sachsen - wo die schönen Frauen wachsen ;)

BeitragVerfasst am: 24.06.2007, 19:42    Titel: Antworten mit Zitat

Mein Vorschlag:
1. JPG-Loader runterladen (zu finden auf www.freebasic.net/forum)
2. Der Loader wird dir die JPG in einen FB-Buffer umwandeln.
3. Diesen Buffer kannst du nun mit Multiput (von Joshy) verwenden und beliebig skalieren/drehen/etc.
_________________
+++ QB-City +++ Die virtuelle Stadt für jeden Freelancer - Join the community!
Projekte: QB-City,MysticWorld (RPG), 2D-OpenGL-Tutorial
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 24.06.2007, 19:50    Titel: Antworten mit Zitat

öhm danke

der thread ist gemeint? http://www.freebasic.net/forum/viewtopic.php?t=2862&highlight=jpgloader

da sind iwie alle links 404 traurig

was ist multiut, woher bekomme ich es, und wie kann ich damit skalieren?
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Stormy



Anmeldungsdatum: 10.09.2004
Beiträge: 567
Wohnort: Sachsen - wo die schönen Frauen wachsen ;)

BeitragVerfasst am: 24.06.2007, 20:01    Titel: Antworten mit Zitat

Hallo,

Anstelle von dem JPG-Loader kannst du auch PLOAD verwenden -> Klick
MultiPut bekommst du hier her: (Klick)

Die Parameter sind eigentlich selbsterklärend:
MultiPut[DES],[x],[y],SRC,[xScale],[yScale],[Rotate],[Trans]

Soweit so gut. Nachdem du eine JPG-Datei in einem Buffergeladen hast, musst du nun an die Höhe/Breite kommen, um die später dementsprechend das dargestellte Bild zu strecken.

FB <= 0.17b:
Code:
w = cptr(Short Ptr, buffer)[0] Shr 3
h = cptr(Short Ptr, buffer)[1]


FB CVS:
Code:
w = cptr(Uinteger Ptr, img)[2]
h = cptr(Uinteger Ptr, img)[3]


Damit dürftest du nun imstande sein, die neue Höhe/Breite zu berechnen und diese berechneten Werte einfach an die Funktion Multiput samt den gelesenen Buffer zu schicken.
_________________
+++ QB-City +++ Die virtuelle Stadt für jeden Freelancer - Join the community!
Projekte: QB-City,MysticWorld (RPG), 2D-OpenGL-Tutorial
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 24.06.2007, 20:09    Titel: Antworten mit Zitat

ich pack jetzt erstmal wieder die 0.16b drauf. pload lässt sich nämlich mit 0.18 gar nicht kompilieren traurig

/€dit:
neee pload lässt sich überhaupt nicht kompilieren.

*ggggggggggggggggg*


/€dit:

ahh gefunden lächeln
http://forum.qbasic.at/viewtopic.php?t=4001&highlight=jpeg+loader

/€dit:
trotzdem danke für deine hilfe

/€dit:
doch da wär noch was happy

wie kann ich die freeimage.dll "reinkompilieren", sodass die nicht mehr benötigt wird?
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 24.06.2007, 21:01    Titel: Antworten mit Zitat

hmm

scheiße

Code:

'*******************************************************************************
'********************************JPG-Viewer*************************************
'*******************************************************************************

#include "freeimage.bi"
#include "crt.bi"
#include "fbgfx.bi"


Declare Function GetJpeg(Byval File As String) As Any Ptr

Dim Image As Any Ptr
Dim File1 as integer = 0804
dim File2 as integer = 0810
dim Filename as string
dim vors as string = ".JPG"
dim count as integer
dim puffer as string * 1
dim alt as string
ScreenRes 1024, 768, 32

count = File1
do until multikey(SC_ESCAPE) = -1
    sleep 500
    puffer = inkey
   
    if count = File2 then
        count = File1
    end if
   
    if multikey(sc_1)  then
        count = count - 1
    else
        count = count
    end if
   
    if multikey(sc_2)  then
        count = count + 1
    else
        count = count
    end if
   
    alt = Filename
    Filename = "CIMG" + trim(str(count)) + vors
   
        Filename = "CIMG" + trim(str(count)) + vors
   
        Image = GetJpeg(Filename)
        If Image Then
            Put (1, 1), Image
        Else
            Print "File not found, Filename:" + Filename
        End If

loop

end

Function GetJpeg(Byval File As String) As Any Ptr
Dim Dib As FIBITMAP Ptr
Dim Dib32 As FIBITMAP Ptr
Dim SprWidth As Integer
Dim SprHeight As Integer
Dim Sprite As Any Ptr
Dim Bits As Any Ptr

Dib = FreeImage_Load(FIF_JPEG, File, JPEG_DEFAULT)
If Dib = 0 Then Return 0

FreeImage_FlipVertical Dib
Dib32 = FreeImage_ConvertTo32Bits(Dib)
Dib32 = FreeImage_Rescale (Dib32, 1024, 768, 0)

SprWidth = FreeImage_GetWidth(Dib32)
SprHeight = FreeImage_GetHeight(Dib32)
Sprite = ImageCreate(SprWidth, SprHeight)
Bits = FreeImage_GetBits(Dib32)

MemCpy CPtr(Zstring Ptr, Sprite) + 4, Bits, SprWidth * SprHeight * 4

FreeImage_Unload(Dib32)
FreeImage_Unload(Dib)

Return Sprite
End Function



die datei ist da, der ausgegeben string stimmt damit überein *g*

und trotzdem kommt File not found mit dem Kopf durch die Mauer wollen
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 24.06.2007, 21:23    Titel: Antworten mit Zitat

die Suchfunktion hat das hier gefunden
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 24.06.2007, 21:25    Titel: Antworten mit Zitat

öhhm

ein großteil des codes kommt aus diesem thread, habe beim 2-edit auch drauf hingewiesen Zunge rausstrecken, naja egal, neuer code, vll. findet jemand mein denkfehler happy

Code:

'*******************************************************************************
'********************************JPG-Viewer*************************************
'*******************************************************************************

#include "freeimage.bi"
#include "crt.bi"
#include "fbgfx.bi"


Declare Function GetJpeg(Byval File As String) As Any Ptr

Dim Image As Any Ptr
Dim File1 as integer = 0804
dim File2 as integer = 5622
dim Filename as string
dim vors as string = ".JPG"
dim count as integer
dim puffer as string * 1
dim alt as string

screen 20, 32

count = File1

do until multikey(SC_ESCAPE) = -1
    sleep 50
    puffer = inkey
    do: sleep 10: puffer = inkey: loop until puffer <> inkey
   
    if multikey(sc_left)  then
        count = count - 1
    end if
   
    if multikey(sc_right)  then
        count = count + 1
    end if
   
    if count = File2 then
        count = File1
    end if
   
    if count < File1 then
        count = File1
    end if
   
    'alt = Filename
    'Filename = trim("CIMG" + trim(str(count)) + vors)
   
        Filename = "CIMG" + trim(str(count)) + vors
   
        Image = GetJpeg(Filename)
        If Image Then
            Put (0,0),Image
        Else
            Print "File not found, Filename:" + Filename
        End If

loop

end

'die funktion blieb gleich


/€dit:

Code:
Dib = FreeImage_Load(FIF_JPEG, File, JPEG_DEFAULT)
If Dib = 0 Then Return 0


die funktion gibt 0 zurück *g* anscheinend kann freeimage die datei net verarbeiten traurig
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 24.06.2007, 22:32    Titel: Antworten mit Zitat

Prob gelöst. Die führende null wurde entfernt

src:
Code:

'*******************************************************************************
'********************************JPG-Viewer*************************************
'*******************************************************************************

#include "inc/freeimage.bi"
#include "inc/crt.bi"


#define SC_LEFT &h4B
#define SC_RIGHT &h4D
#define SC_ESCAPE &h01

Declare Function GetJpeg(Byval File As String) As Any Ptr

Dim Image As Any Ptr
Dim File1 as integer = 804 ' Erste Nummer
dim File2 as integer = 5622 ' Letzte Nummer
dim Filename as string 'TString
dim vors as string = ".JPG" ' Endung
dim count as integer
dim puffer as string * 1 'tast-puffer

screen 20, 32 '1024x768x32

count = File1

do until multikey(SC_ESCAPE) = -1
    sleep 50
    puffer = inkey
    do: sleep 10: puffer = inkey: loop until puffer <> inkey
   
    if multikey(sc_left)  then
        count = count - 1
    end if
   
    if multikey(sc_right)  then
        count = count + 1
    end if
   
    if count = File2 then
        count = File1
    end if
   
    if count < File1 then
        count = File1
    end if
   
    if count < 1000 then
        Filename = "CIMG0" + trim(str(count)) + vors
    else
        Filename = "CIMG" + trim(str(count)) + vors
    end if
   
    screenlock
    cls
        Image = GetJpeg(Filename)
        If Image Then
            Put (0,0),Image
        Else
            Print "File not found (Error Nr." + str(Image) + ", Filename:" + Filename
        End If
    screenunlock

loop
end

Function GetJpeg(Byval File As String) As Any Ptr
Dim Dib As FIBITMAP Ptr
Dim Dib32 As FIBITMAP Ptr
Dim SprWidth As Integer
Dim SprHeight As Integer
Dim Sprite As Any Ptr
Dim Bits As Any Ptr

Dib = FreeImage_Load(FIF_JPEG, File, JPEG_DEFAULT)
If Dib = 0 Then Return 0

FreeImage_FlipVertical Dib
Dib32 = FreeImage_ConvertTo32Bits(Dib)
Dib32 = FreeImage_Rescale (Dib32, 1024, 768, 0)

SprWidth = FreeImage_GetWidth(Dib32)
SprHeight = FreeImage_GetHeight(Dib32)
Sprite = ImageCreate(SprWidth, SprHeight)
Bits = FreeImage_GetBits(Dib32)

MemCpy CPtr(Zstring Ptr, Sprite) + 4, Bits, SprWidth * SprHeight * 4

FreeImage_Unload(Dib32)
FreeImage_Unload(Dib)

Return Sprite
End Function




Nun auch auf meiner Homepage zu finden lächeln .
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 25.06.2007, 18:05    Titel: Antworten mit Zitat

kleiner tipp: nicht jeder traut selbstenpackenden zip-archiven.
jaja, nun mein standardspruch: das ist außerdem mit kanonen auf spatzen geschossen durchgeknallt Denk doch mal an linux- oder sonstwas-user, die können vlt archive öffnen, aber keine EXEn ausführen... mit den Augen rollen
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 25.06.2007, 21:44    Titel: Antworten mit Zitat

Jojo hat Folgendes geschrieben:
kleiner tipp: nicht jeder traut selbstenpackenden zip-archiven.
jaja, nun mein standardspruch: das ist außerdem mit kanonen auf spatzen geschossen durchgeknallt Denk doch mal an linux- oder sonstwas-user, die können vlt archive öffnen, aber keine EXEn ausführen... mit den Augen rollen


ahh danke für den hinweis happy auch wenn (meiner meinung nach) wine zur "standard"-ausrüstung gehört happy ....

werde ich mal nach normalen ZIP ändern happy

/€dit:
geändert lächeln
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 25.06.2007, 22:06    Titel: Antworten mit Zitat

Würdest du es toll finden, wenn du jedes mal den WinUAE starten musst, nur weil du ein Amiga-Archiv entpacken willst? Ich fände es definitiv schrecklich.

und es gibt nunmal auch OSX, und das hat KEIN wine... und DOS erst recht nicht.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4700
Wohnort: ~/

BeitragVerfasst am: 25.06.2007, 22:18    Titel: Antworten mit Zitat

csderats hat Folgendes geschrieben:
auch wenn (meiner meinung nach) wine zur "standard"-ausrüstung gehört happy ....

Es soll ja Linux-Benutzer geben, die Linux benutzen wollen und nicht Windows ...
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz