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:

Kann man BMP's Scalieren & Rotieren?

 
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
7Basic



Anmeldungsdatum: 24.10.2013
Beiträge: 9

BeitragVerfasst am: 24.10.2013, 04:52    Titel: Kann man BMP's Scalieren & Rotieren? Antworten mit Zitat

ich würde gern eine bilddatei auf die screenres grösse scalieren, ist dieses möglich, wenn ja wie genau?

wichtig ist dabei das ich pixel weite und bixel höhe angeben kann.
desweiteren soll man das bild Rotieren lasen können.

danke im vorraus,
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



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

BeitragVerfasst am: 24.10.2013, 15:39    Titel: Antworten mit Zitat

Dafür gibts diverse fertige lösungen, habe selbst mal eine geschrieben... ich guck mal ob ich sie finde... (war aber eine 'schnelllösung' und gibt sicherlich besseres)
Ansonsten suche mal nach Multiput (zumindest was rotieren angeht)

ist schon etwas älter und könnte vermutlich verbessert werden, sollte aber funktionieren:
Code:


/'
ReSize vergroessert/verkleinert einen 'ImageBuffer'

Example:

NeuesBildBuffer=ReSize (OriginalBildBuffer,NeueBreite,NeueHoehe,AusgangsOption)

Mit der AusgangsOption kann das neu Dimensionierte Bild in der selben Buffergroesse
zurueckgegeben werden, dabei gehen Bildinhalte ausserhalb dieses Bereiches verloren.
'/



'ReSize
'Dimensioniert einen Buffer und seinen Inhalt neu
Function ReSize (byref InBuffer as any ptr, byval NSizeX as Integer, _
                 NSizeY as Integer, Byval InOut as Integer=0) as any ptr
   
       'InOut - 0=Inhalt und Buffer vergroessern
       '        1=Bufferinhalt vergroessern und Buffergroesse beibehalten
       
       If InBuffer=0 Then Return 0
       
       Dim GetInteger    as Integer Ptr=InBuffer
       Dim BufferVersion as Integer=GetInteger[0]
       
       If BufferVersion <> &h7 Then Return 0
       
       Dim BufferSizeX   as Integer=GetInteger[2]
       Dim BufferSizeY   as Integer=GetInteger[3]       
       
       Dim SBuffer as any ptr
       
       Dim XStep as Double
       Dim YStep as Double
       
       Dim XS as Integer
       Dim YS as Integer
       Dim XE as Integer
       Dim YE as Integer
       
       XStep=(NSizeX-1)/(BufferSizeX)
       YStep=(NSizeY-1)/(BufferSizeY)

       SBuffer=Imagecreate(NSizeX,NSizeY)
       
       Dim SCol as Integer

       For Y as Integer=0 to BufferSizeY-1
       For X as Integer=0 to BufferSizeX-1
           
            SCol=Point (X,Y,InBuffer)
           
            XS=XStep*X
            YS=YStep*Y
            XE=XStep+(XStep*X)
            YE=YStep+(YStep*Y)
            'XE=XStep*(X+1)
            'YE=YStep*(Y+1)
           
            Line SBuffer,(XS,YS)-(XE,YE),SCol,bf
       
       Next X
       Next Y
   
       If InOut<>0 Then
            'hinzugefuegt um das vergroesserte/verkleinertebild in selber buffergroesse
            'zurueck zu liefern
            Dim NBuffer as any ptr = Imagecreate (BufferSizeX,BuffersizeY,&hFFFF00FF)
           
            Dim PCX as Integer
            Dim PCY as Integer
       
            If NSizeX>BufferSizeX Then
                PCX=int((NSizeX-(BufferSizeX-1))/2)
                PCY=int((NSizeY-(BufferSizeY-1))/2)
                Get SBuffer,(PCX,PCY)-(PCX+BufferSizeX-1,PCY+BufferSizeY-1),NBuffer
                Deallocate (SBuffer)
                Return NBuffer
            Else
                PCX=((BufferSizeX-NSizeX)/2)
                PCY=((BufferSizeY-NSizeY)/2)
                Put NBuffer,(PCX,PCY),SBuffer,PSet
                Deallocate (SBuffer)
                Return NBuffer
            End If
        Else
            Return SBuffer
        End If
   
End Function

_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 24.10.2013, 15:48    Titel: Antworten mit Zitat

Hallo,

hilft dir vielleicht auch dieses Code-Beispiel weiter?
ImageScale2x von volta

Ansonsten hier noch ein Thread zum Thema aus dem internationalen Forum:
http://www.freebasic.net/forum/viewtopic.php?p=91780

Eine weitere Möglichkeit könnte die Verwendung einer externen Bibliothek wie FreeImage sein.

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
7Basic



Anmeldungsdatum: 24.10.2013
Beiträge: 9

BeitragVerfasst am: 24.10.2013, 17:42    Titel: Antworten mit Zitat

ich habe mich für multiput entschieden
problem ist, wie bekomm ich nun das bild auf 1920x1080 pixel?

hatte so gedacht, aber so ist falsch
Code:
MultiPut , 0, 0, HintergrundIMG, 1920,1080, 0
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 24.10.2013, 19:20    Titel: Antworten mit Zitat

(auch wenn die Frage schon beantwortet ist happy )

Code:
MultiPut , MittelpunktX, MittelpunktY, HintergrundIMG, 1920,1080, 0

_________________
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
7Basic



Anmeldungsdatum: 24.10.2013
Beiträge: 9

BeitragVerfasst am: 24.10.2013, 20:07    Titel: Antworten mit Zitat

anderes Problem,

ich nutze jetzt ja multiput, aber wie bekomme ich das image transperent?
ich nutze nur BMP's das bild was trans sein soll hat den rgb wert (255,0,255) aber die rosa farbe wird leider gemalt

danke im vorraus für hilfe
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