[GELÖST] MaxGUI - Bild in Canvas zeichnen?

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

CO2

ehemals "SirMO"

Betreff: [GELÖST] MaxGUI - Bild in Canvas zeichnen?

BeitragMi, Sep 12, 2012 15:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich habe ein Problem:
ich möchte ein PNG-Bild in einem Canvas Zeichnen. Hier mein bisheriger Code BlitzMax: [AUSKLAPPEN]
Import maxgui.drivers

Version:String = "1.0"
AppTitle:String = "Potenzial-Diagramm Editor [v" + Version + "]"

Global HELPFILE:String = "Hilfe.txt"

Global mainwindow:TGadget = CreateWindow(AppTitle, 0, 0, 800, 500, Null, WINDOW_TITLEBAR | WINDOW_MENU | WINDOW_STATUS | WINDOW_CENTER)
Global mw_maincanvas:TGadget = CreateCanvas(5, 25, ClientWidth(mainwindow) - 10, ClientHeight(mainwindow) - 30, mainwindow)
SetGraphics(CanvasGraphics(mw_maincanvas))
Global mw_potenzialdiagrammdata:TPixmap = LoadPixmap("test.png")
Repeat
DrawPixmap(mw_potenzialdiagrammdata, 0, 0)
Flip 0

WaitEvent()
Select EventID()
Case EVENT_WINDOWCLOSE, EVENT_APPTERMINATE
End
End Select
Forever


Wenn ich das ausführe bekomme ich folgenden Fehler Zitat:
D3DERR: Unable to lock render target surface


Was bedeutet das? Und wie kann ich das Problem beheben?
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti
  • Zuletzt bearbeitet von CO2 am Mi, Sep 12, 2012 17:17, insgesamt einmal bearbeitet

Lobby

BeitragMi, Sep 12, 2012 16:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Seltsam, DrawPixmap scheint nicht mit Canvas-Grafikkontexten klar zu kommen.
Aber wie dem auch sei, ich würde grundsätzlich von der Verwendung von DrawPixmap abraten, da es einerseits langsam ist und sich andererseits die üblichen max2D-Grafikbefehle nicht darauf auswirken. Was spricht gegen die Verwendung von ganz normalen TImages?
TheoTown - Eine Stadtaufbausimulation für Android, iOS, Windows, Mac OS und Linux

Midimaster

BeitragMi, Sep 12, 2012 16:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Da muss was mit dem File nicht stimmen. Diesr Code läuft bei mir:

BlitzMax: [AUSKLAPPEN]
Import maxgui.drivers

Version:String = "1.0"
AppTitle:String = "Potenzial-Diagramm Editor [v" + Version + "]"

Global HELPFILE:String = "Hilfe.txt"

Global mainwindow:TGadget = CreateWindow(AppTitle, 0, 0, 800, 500, Null, WINDOW_TITLEBAR | WINDOW_MENU | WINDOW_STATUS | WINDOW_CENTER)
Global mw_maincanvas:TGadget = CreateCanvas(5, 25, ClientWidth(mainwindow) - 10, ClientHeight(mainwindow) - 30, mainwindow)
SetGraphics(CanvasGraphics(mw_maincanvas))
Global mw_potenzialdiagrammdata:TPixmap = LoadPixmap("AutoBlau.png")
testimg=CreateImage(300,200)
testpix:TPixmap=CreatePixmap(300,200,PF_RGB888)
Repeat
'DrawPixmap(mw_potenzialdiagrammdata, 0, 0)
DrawRect 100,100,100,100
DrawImage testimg, 100,100
DrawPixmap testpix, 100,100
DrawPixmap mw_potenzialdiagrammdata, 100,100
Flip 0

WaitEvent()
Select EventID()
Case EVENT_WINDOWCLOSE, EVENT_APPTERMINATE
End
End Select
Forever
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

CO2

ehemals "SirMO"

BeitragMi, Sep 12, 2012 17:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Tatsächlich: Es lag an dem Bild... war wohl zu groß für das Canvas?

Ich danke euch!
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

klin

BeitragMi, Sep 12, 2012 18:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Wartet. Das Problem habe ich auch oft, wenn ich mit Canvas arbeite. Habs immer vertuscht, indem ich OpenGL anstatt DX benutzt hatte (Fehler war weg, Canvas lief 1A).

Ich dachte immer, dass ich was falsch gemacht habe... Aber wenn es nun auch andere haben...

Der Fehler passiert meistens immer bei den ersten Tests. z.B. erstes Bild usw. (Aber auch nur bei Pixmap denke ich...)

@Midimaster: Du hast nicht als erstes Pixmap gezeichnet. Versuch mal direkt bei dem Start eine Pixmap zu zeichnen (Hab derzeit keine Möglichkeit es zu testen...)

Klin

Midimaster

BeitragMi, Sep 12, 2012 19:24
Antworten mit Zitat
Benutzer-Profile anzeigen
kein Unterschied!

Ich zeichne die PixMap nun direkt nach der Zeile "Repeat" und es funktioniert trotzdem.

Mir scheint die Bildgröße als Ursache glaubhaft. Reduziere ich die Fenstergröße auf 400x300pix, dann erhalte ich mit meinem Testbild (140x220pix) bereits ebenfalls die Meldung...
Zitat:
"D3DERR: Unable to lock render target surface"

...Logisch: Die Canvas (384x198pix) ist dann zu klein.

Tipp:
Allerdings darf man die Canvas auch ruhig immer größer als das Window machen:

BlitzMax: [AUSKLAPPEN]
Global mw_maincanvas:TGadget = CreateCanvas(5, 25, 1024, 768, mainwindow)
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

Xeres

Moderator

BeitragMi, Sep 12, 2012 19:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist wenig verwunderlich:
Doku hat Folgendes geschrieben:
This function is intended for debugging purposes only - performance is unlikely to be stellar.

Ladet die Pixmap am besten als Image.

Der entsprechende Code in d3d9max2d.bmx ist wenig erhellend...
BlitzMax: [AUSKLAPPEN]
Local rect[]=[x,y,x+width,y+height]
Local lockedrect:D3DLOCKED_RECT=New D3DLOCKED_RECT
If dstsurf.LockRect( lockedrect,rect,0 )<0
d3derr "Unable to lock render target surface~n"
dstsurf.Release_
Return
EndIf
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group