Image erstellen
Übersicht

MatheBetreff: Image erstellen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
wie erstelle ich in BlitzMax ein Bild? das geht doch so aber was ist da falsch? Code: [AUSKLAPPEN] Global image = CreateImage(25, 25) SetColor 51, 204, 102 DrawRect 0, 0, 25, 25 Flip mfg. |
||
#ReaperNewsposter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Öhm... kommt drauf an, was du nun bewerkstelligen willst.
Also CreateImage() benutzt du schon richtig. Wenn du aber erwartest, dass es auch gezeichnet wird, musst du schon DrawImage() benutzen. Wenn du in das Bild zeichnen willst... In der BM-Doc gibts dazu unter CreateImage() ein kleines Beispiel: Code: [AUSKLAPPEN] ' creates a 256x1 image with a black to blue color gradient
Const ALPHABITS=$ff000000 Graphics 640,480,32 image=CreateImage(256,1) map=LockImage(image) For i=0 To 255 WritePixel(map,i,0,ALPHABITS|i) Next UnlockImage(image) DrawImageRect image,0,0,640,480 DrawText "Blue Color Gradient",0,0 Flip WaitKey Genauer kann ich dir nun leider auch nicht sagen. Benutze es kaum. Kannst dir auch mal Pixmaps anschauen. |
||
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7 |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn man die Pixel nicht einzeln herumschupsen möchte sondern mit den anderen Draw-Befehlen, zeichnet man das auf den Backbuffer und grabt das dann.
Code: [AUSKLAPPEN] SuperStrict
rem Test um ein Bild zur Laufzeit zu erstellen... endrem Graphics(800, 600, 0, 60) SetBlend(ALPHABLEND) AutoMidHandle(True) Local Bild:TImage = CreateImage(64, 64) Cls SetColor(255, 0, 0) DrawOval(16, 16, 32, 32) SetColor(255, 255, 255) DrawLine(0, 0, 0, 63) DrawLine(0, 63, 63, 63) DrawLine(63, 63, 63, 0) DrawLine(63, 0, 0, 0) GrabImage(Bild, 0, 0) rem Breite und Höhe des erstellten Bildes werden ab der Position von Grabimage vom Backbuffer eingelesen. endrem DrawText("Bild erstellt, bitte Taste drücken!", 300, 300) Flip WaitKey() '* Testschleife: Local w:Int, a:Float Repeat '*** Testrechteck ob Alpha tatsächlich da ist, oder nur schwarz: SetRotation(0) ;SetAlpha(1) DrawRect(400, 300, 50, 50) '*** Das Gegrabte Bild: w = (w + 1) Mod 360 ; SetRotation(w) a = (a + 0.005) Mod 1 ; SetAlpha(a) DrawImage(Bild, 400, 300) Flip Cls Until KeyHit(KEY_ESCAPE) Or AppTerminate() |
||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Mathe |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
eigentlich hab ich vor 2 Tage angefangen mit BlitzMax zu lernen leider versteh ich das noch gar nicht...
Es soll ein Ball erstellt werden der sich dann Bewegen soll aber ich versteh das noch nicht ganz so mit den Schleifen der Debugger mecket immer bei der Schleife: Code: [AUSKLAPPEN] For i = 1 to 20
.... next eine Fehlermeldung "Identifier "i" not found" und ich versteh auch nicht warum das image:Timage heißen muss? Code: [AUSKLAPPEN] 'This BMX file was edited with BLIde ( http://www.blide.org )
Graphics 640, 480, 0 Type Ball Field X:Int, Y:Int Field alpha:Int End Type Global image:Timage = CreateImage(25, 25) SetColor 51, 204, 102 drawRect 0, 0, 25, 25 Flip For i = 1 To 20 ba.Ball = New Ball ba.X = Rand(50, 590) ba.Y = Rand(50, 430) ba.alpha = Rand(0, 360) Next Repeat Cls UpdateBall() Flip Until KeyHit(key_Esc) End Function UpdateBall() For ba.Ball = EachIn Ball ba.x = ba.x + 25 * Cos(ba.alpha) ba.y = ba.y + 25 * Sin(ba.alpha) DrawImage(image, ba.X, ba.Y) Next End Function hoff ich konnte mich verständlich ausdrücken... mfg. |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Superstrict erfordert, dass man alle Variablen deklariert und dabei einen Typ angibt.
Z.B. Code: [AUSKLAPPEN] For Local i:Int = 1 to 20
[...] next Ein Bild ist vom Typ Timage... Nicht wie bei Blitzbasic ein Int. |
||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
#ReaperNewsposter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wenn du SuperStrict verwendest (was zu empfehlen ist), musst du jede Variable mit einem angegeben Typen deklarieren, also erstellen.
Die Schleife müsste also z.B. so aussehen: Code: [AUSKLAPPEN] For Local i:Int = 1 to 20
... Next Dann wird eine Variable "i" vom Typ Int(eger) erstellt. Das Selbe gilt also auch bei anderen Variablen-Typen. Wenn du also ein Image benutzten willst (egal ob geladen oder direkt erstellt), musst die Variable dazu - also in deinem Fall "image" - dem Typen TImage entsprechen. Das Ganze hat mit Objekt orientierem Programmieren (kurz: OOP) zu tun. Ich weiß nicht, in wie weit du eventuell damit in anderen Sprachen zu tun hast/hattest? Ist nämlich ein großes und etwas komplizierteres Thema. Gibt dazu auch einige Tutorials. |
||
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7 |
Mathe |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
okey aber ich bekomme es trotzdem nicht hin... dass ich die Types richtig deklariere..
mfg. |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du tust in deinem Code auch so, als wäre die BMax Syntax die gleiche wie die von BB...
So wärs schon mal besser: Code: [AUSKLAPPEN] SuperStrict
Graphics 640, 480, 0 Type TBall Field X:Int, Y:Int Field Alpha:Int Global list:TList = CreateList() Method New() Self.list.AddLast(Self) End Method End Type Global image:Timage = CreateImage(25, 25) SetColor 51, 204, 102 drawRect 0, 0, 25, 25 Flip For Local i:Int = 1 To 20 Local ba:Ball = New Ball ba.X = Rand(50, 590) ba.Y = Rand(50, 430) ba.alpha = Rand(0, 360) Next Repeat Cls UpdateBall() Flip Until KeyHit(key_Esc) End Function UpdateBall() For Local ba:Ball = EachIn TBall.list ba.x = ba.x + 25 * Cos(ba.alpha) ba.y = ba.y + 25 * Sin(ba.alpha) DrawImage(image, ba.X, ba.Y) Next End Function |
||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Mathe |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
es kommt immer eine Fehlermeldung: "Identifier "Ball" not found" aber warum? | ||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn Du dir die Zeile anguckst welche der Debugger markiert wirst Du feststellen dass da ein :Ball deklariert wird. Der Type heisst aber TBall. Darum ist superstrict auch so gut, es hilft dir falsch benannte Vars (zB durch Vertipper) zu finden. | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
Mathe |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ah okey danke... ich glaub ich lese lieber noch ein bischen mehr über BM... | ||
Mathe |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
so ich will jetzt keinen neuen Threat aufmachen deshalb schreibs ich hier noch mal rein!
Ich erstelle mit... Code: [AUSKLAPPEN] Global Ball%[5,1] eine Array...
jetzt will ich sie füllen mit: Code: [AUSKLAPPEN] For Local a% = 1 To 5
For Local b% = 0 To 1 Ball[a,b] = Rand(250,350) 'X-Koordinaten & Y-Koordinaten erstellen Next Next und hier kommt dann immer eine Fehlermeldung "Unhandled Exception: Attempt to index array element boyond array length", aber ich versteh die Fehlermeldung nicht ganz dass soll doch heißen dass a% über die Arraygröße hinausgeht oder? Code: [AUSKLAPPEN] Strict
Graphics 800,600,0 Global Ball%[5,1] For Local a% = 1 To 5 For Local b% = 0 To 1 Ball[a,b] = Rand(250,350) 'X-Koordinaten & Y-Koordinaten erstellen Next Next Global image:Timage = CreateImage(25,25) SetColor 244,83,139 DrawOval 0,0,25,25 Flip '----Main---- Repeat Cls UpdateBall() Flip Until KeyHit(Key_Escape) End '----Function---- Function UpdateBall() For Local i% = 0 To 5 DrawImage(image,Ball[i,0],Ball[i,1]) Next EndFunction |
||
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
b% auch.
BlitzMax fängt bei 0 an zu zählen. Also musst du dein Array [5,2] groß machen und 0 To 4 schreiben. Das 0 To 1 haste richtig gemacht, aber das Array war zu klein. ![]() |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das 0 To 1 ist auch falsch, 0 To 0 wäre richtig gewesen, oder 0 Until 1. | ||
Mathe |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ähm okey aber jetzt hab ich noch ein Problem mir zeigt es meine Bälle nicht an warum?
Was ist der unterschied zwischen Strict und SuperStrict? |
||
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Weil in dein Bild nix gezeichnet wurde. | ||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
![]() |
Suco-XBetreff: ..... |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Global image:Timage = CreateImage(25,25) SetColor 244,83,139 DrawOval 0,0,25,25 GrabImage image,0,0 'TADAAAAAAA SetColor 255,255,255 |
||
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB |
Mathe |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
danke aber warum muss ich das Bild kopieren das versteh ich jetzt nicht ganz?
mfg. |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Man hat in BMax keinen Imagebuffer, also zeichnet man in den Backbuffer und kopiert den Inhalt von dort in das Bild. | ||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Mathe |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
aso danke...
Edit: Hallo ich hab noch eine Frage? warum muss man wenn man ein Typefeld abfragen will schreiben: was macht das CreateList() und warum brauch ich dazu eine Method? (Hab vor 4 Tagen mit BM angefangen) Code: [AUSKLAPPEN] Type gfx
Field x% , y% Global list:TList = CreateList() Method New() Self.list.AddLast(Self) End Method EndType und warum muss ich dann das Typefeld z.b in einer Function so abfragen? Was macht da das gfx.list? Code: [AUSKLAPPEN] Function DrawGFX()
For Local b:gfx = EachIn gfx.list DrawImage (image , b.x , b.y) Next EndFunction Würde mich freuen wenn mir das jemand mal ganz kurz und einfach erklären könnte ich lese auch schon brav Tuts! Schon mal danke! mfg. Matthias |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group