copyIMage ? aber wie
Übersicht BlitzMax, BlitzMax NG Beginners-Corner
c64Betreff: copyIMage ? aber wie |
So, Sep 11, 2005 11:29 Antworten mit Zitat |
|
---|---|---|
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 |
So, Sep 11, 2005 12:07 Antworten mit Zitat |
|
---|---|---|
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-XBetreff: ....... |
So, Sep 11, 2005 12:15 Antworten mit Zitat |
|
---|---|---|
Ansonsten halt noch diese Lösung (LÄsst sich wohl auch noch ausbauen)
Hmm..Ist aber schlecht wegen den Frames 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 |
So, Sep 11, 2005 12:30 Antworten mit Zitat |
|
---|---|---|
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 |
||
Jolinah |
So, Sep 11, 2005 12:42 Antworten mit Zitat |
|
---|---|---|
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 ------------------- |
||
Übersicht BlitzMax, BlitzMax NG Beginners-Corner
Powered by phpBB © 2001 - 2006, phpBB Group