copyIMage ? aber wie

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

c64

Betreff: copyIMage ? aber wie

BeitragSo, Sep 11, 2005 11:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie kann ich das lösen ? dass richtig kopiert wird ?


Code: [AUSKLAPPEN]

Function copyIMAGE:timage(src_IMAGE:timage)

 
 Local dst_image:TIMAGE             ..
      ,dst_pxm  :TPIXMAP            ..
      ,src_pxm  :TPIXMAP            ..
      ,src_X=ImageWidth (src_image) ..
      ,src_Y=ImageHeight(src_image) ..


    dst_image  = CreateImage  (src_x,src_Y,1,dynamicimage)                     
    src_pxm    = LockImage    (src_image                 )
    dst_pxm    = LockImage    (dst_image                 )
    dst_pxm    = CopyPixmap(src_pxm)

 UnlockImage (dst_image)
 UnlockImage (SRC_image)

 

 
 Return dst_image:TIMAGE

End Function

Graphics 800,600,16,100

     Global img_01=CreateImage(128,128,1,dynamicimage)
     map=LockImage(IMG_01)
       For x=0 To 127
      For y=0 To 127
      WritePixel(map,x,y,$FFFFFFFF-x*y)
      Next
      Next
      UnlockImage(IMG_01)

   Global img_02=copyimage (img_01)

Repeat

 If KeyHit(key_escape) End

 SetColor 100,100,100
         
 DrawImage img_01, 50, 50
 DrawImage img_02,150,150

 SetColor 30,80,30

 DrawText "Original", 50, 50
 DrawText "KOPIE   ",250,250
            
Flip
Forever

  • Zuletzt bearbeitet von c64 am So, Jan 29, 2006 10:17, insgesamt einmal bearbeitet

Jolinah

BeitragSo, Sep 11, 2005 12:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Für dein Beispiel musst du aber nichts kopieren, kannst ja einfach das selbe Bild an 2 verschiedenen Stellen zeichnen. Oder hab ich da was falsch verstanden?

Ansonsten könntest du das ganze TImage so kopieren:

Code: [AUSKLAPPEN]
Function CopyImage:TImage(src:TImage)
   If src = Null Then Return Null
   
   Local dst:TImage = New TImage
   dst.pixmaps = New TPixmap[src.pixmaps.length]
   dst.frames = New TImageFrame[src.frames.length]
   dst.seqs = New Int[src.seqs.length]
   
   MemCopy(dst.pixmaps, src.pixmaps, SizeOf(dst.pixmaps))
   MemCopy(dst.frames, src.frames, SizeOf(dst.frames))
   MemCopy(dst.seqs, src.seqs, SizeOf(dst.seqs))
   
   Return dst
End Function



Edit: Wobei das so auch nicht komplett kopiert wird. Um es richtig zu kopieren müsste man noch jedes einzelne Pixmap und Frame kopieren in ner For-Schleife, da so nur die Referenzen darauf kopiert werden.

Suco-X

Betreff: .......

BeitragSo, Sep 11, 2005 12:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Ansonsten halt noch diese Lösung (LÄsst sich wohl auch noch ausbauen)
Hmm..Ist aber schlecht wegen den Frames Sad

Code: [AUSKLAPPEN]


function CopyImage:Timage(Image:TImage)
return LoadImage(LockImage(Image))
end function

Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB
 

c64

BeitragSo, Sep 11, 2005 12:30
Antworten mit Zitat
Benutzer-Profile anzeigen
danke an euch ,!

Aber beide sachen funnzen nicht , und dann ist noch zu bedenken
das ich nicht ständig was laden möchte ausserdem erstelle ich ja
auch images(diese grabe ich dann in das Imagehandle) beim programm start und die will ich dann kopieren.

Grabimage eignet sich nicht dafür da eventuell beim programmablauf
auch ein bild kopiert werden muss , was dann erst mal in den
Backbuffer gezeichnet werden müsste ,und eventuell vorhandenes übermalt.

EDIT !!

@SUCO Sry !!!

war mein Fehler ! hatte lockimage vergessen !

und ausserdem wusste ich garnicht das man das bild auch aus dem speicher laden kann Smile

Jolinah

BeitragSo, Sep 11, 2005 12:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaub so gehts (inklusive Frames):

Code: [AUSKLAPPEN]
Function CopyImage:TImage(src:TImage)
   If src = Null Then Return Null
   
   Local dst:TImage = New TImage
   MemCopy(dst, src, SizeOf(dst))
   
   dst.pixmaps = New TPixmap[src.pixmaps.length]
   dst.frames = New TImageFrame[src.frames.length]
   dst.seqs = New Int[src.seqs.length]
   
   For Local i = 0 To dst.pixmaps.length-1
      dst.pixmaps[i] = CopyPixmap(src.pixmaps[i])
   Next
   
   For Local i = 0 To dst.frames.length-1
      dst.Frame(i)
   Next
   
   MemCopy(dst.seqs, src.seqs, SizeOf(dst.seqs))
   
   Return dst
End Function


Zumindest sind dann überall unterschiedliche Pointer-Adressen:

Code: [AUSKLAPPEN]
Graphics 800, 600, 0

Local a:TImage = LoadImage("test.jpg")
Local b:TImage = CopyImage(a)

Print "Adressen:"
Print Int(Byte Ptr(a.pixmaps[0]))
Print Int(Byte Ptr(b.pixmaps[0]))
Print "-------------------"
Print Int(Byte Ptr(a.frames[0]))
Print Int(Byte Ptr(b.frames[0]))
Print "-------------------"
Print a.seqs[0]
Print b.seqs[0]
Print "-------------------"

a = Null
b = Null

EndGraphics
FlushMem

End


Code: [AUSKLAPPEN]
Adressen:
19328624
19328808
-------------------
5535880
19328976
-------------------
0
0
-------------------

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group