Alphablending
-
Ich benutze C# und OpenGL und generiere mir ein Bild über die Bitmap in C# indem ich jedes Pixel einzeln setze mit
Bitmap bmp = new Bitmap(200, 300); bmp.SetPixel(x, y, Color.FromArgb((int)r, (int)g, (int)b));
alles schon mal erzählt bis auf das Pixelweise.
Diese Bild will ich mir über ne textur auf ein Rechteck anzeigen lassen. Dieser Teil ist mit OpenGL, auch schon mal erzählt.
Diese Bild seh ich aber nicht, nur wenn ich es vorher mitbmp.Save("bild.bmp", ImageFormat.Bmp);
speichere kann ich es auch anzeigen. Wenn ich es ohne Speichern anzeigen will bekomm ich ein weisses Bild, obwohl die richtigen Daten in der anzuzeigenden Variable stehen.
Als Grundlage für meine Textur nehm ich das nehe-tut lesson 8 (auch schon mal geschrieben)FRAGEN:
Warum seh ich nur ein weisses Bild?
Muss ich mein Bild vorher speichern oder gibt auch ne andre Möglichkeit um es anzuzeigen?
Wie kann ich es aktualisieren wenn sich das Bild geändert hat?Gebe zu OpenGL hab ich nicht extra geschrieben aber nachdem in den nehe-tuts mit OpenGL gearbeitet wird hab ich das nicht mehr extra geschrieben.
-
TGGC schrieb:
Optimizer schrieb:
[Blume = OFF][...]TGGC labert für gewöhnlich Mülll[...][Blume = ON]
Das brauchst du nicht durch die Blume sagen, sage es einfach so!
Bye, TGGC (Reden wie die Großen)
Hab ich doch, die Blume war ja ausgeschaltet.
@Quotenmausi: Naja, OpenGL kann doch Texturen nur aus Dateien laden, oder sollte ich mich täuschen? Warum willst du denn verhindern, dass du eine Textur von der Platte lädst?
Weiterhin kommt hinzu, dass Bitmap (wie ich schon mal sagte) für die GDI gedacht ist. Wie lädst du das Bild überhaupt?
-
Optimizer schrieb:
@Quotenmausi: Naja, OpenGL kann doch Texturen nur aus Dateien laden, oder sollte ich mich täuschen? Warum willst du denn verhindern, dass du eine Textur von der Platte lädst?
Weiterhin kommt hinzu, dass Bitmap (wie ich schon mal sagte) für die GDI gedacht ist. Wie lädst du das Bild überhaupt?Dass man Texturen nur aus Dateien laden kann da war ich mir nicht sicher.
Auf der Festplatte speicher kostet Zeit und solche hab ich nicht wirklich und ich dachte mit dass es auch ohne speichern gehen könnte. Aber wenn das nicht geht muss ich wohl zuerst speichern und dann anzeigen.
image1 = bmp; if (image1 != null) { GL.glColor4f(1.0f, 1.0f, 1.0f, fluo_alpha); image1.RotateFlip(RotateFlipType.RotateNoneFlipY); System.Drawing.Imaging.BitmapData bitmapdata; Rectangle rect = new Rectangle(0, 0, image1.Width, image1.Height); bitmapdata = image1.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb); GL.glPixelStorei(GL.GL_PACK_SKIP_IMAGES,0); GL.glGenTextures(0, this.texture); GL.glBindTexture(GL.GL_TEXTURE_2D, 0); GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_LINEAR); GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR_MIPMAP_NEAREST); GL.gluBuild2DMipmaps(GL.GL_TEXTURE_2D, (int)GL.GL_RGB, image1.Width, image1.Height, GL.GL_BGR_EXT, GL.GL_UNSIGNED_BYTE, bitmapdata.Scan0); image1.UnlockBits(bitmapdata); image1.Dispose(); }
-
Das ist doch ein einmaliger Vorgang, eine Textur zu laden. Da gibt es IMO keinen Grund, mit der Zeit rumzugeizen.
Wenn du deine Textur aus einer Datei laden kannst, dann tu es doch, das ist der übliche Weg. Ich verstehe außerdem nicht, warum du das Bild zur Laufzeit erzeugst.
-
Ich erzeuge mein Bild zur Laufzeit, weil sich mein Bild ändert ich ich zuvor nicht weiss wie es aussieht. Bin auch mit der Textur nicht allzu glücklich weil ich eben immer wieder ein neues Bild haben will. Weiss aber keine andere Möglichkeit ein Bild in OpenGL zu bringen. Wenn also jemand ne andre möglichkeit weiss bin ich sehr dankbar.
-
Quotenmausi schrieb:
image1 = bmp; if (image1 != null) { GL.glColor4f(1.0f, 1.0f, 1.0f, fluo_alpha); image1.RotateFlip(RotateFlipType.RotateNoneFlipY); System.Drawing.Imaging.BitmapData bitmapdata; Rectangle rect = new Rectangle(0, 0, image1.Width, image1.Height); bitmapdata = image1.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb); GL.glPixelStorei(GL.GL_PACK_SKIP_IMAGES,0); GL.glGenTextures(0, this.texture); GL.glBindTexture(GL.GL_TEXTURE_2D, 0); GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_LINEAR); GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR_MIPMAP_NEAREST); GL.gluBuild2DMipmaps(GL.GL_TEXTURE_2D, (int)GL.GL_RGB, image1.Width, image1.Height, GL.GL_BGR_EXT, GL.GL_UNSIGNED_BYTE, bitmapdata.Scan0); image1.UnlockBits(bitmapdata); image1.Dispose(); }
Und dieser Code funktioniert, wenn bmp von der Platte geladen ist, aber nicht, wenn bmp so wie oben gezeigt erstellt wird?
Das man Texturen nur aus Dateien laden kann ist natürlich Unsinn.
Bye, TGGC (Reden wie die Großen)
-
Richtig nur wenn ich sag
bmp.Save("bild.bmp", ImageFormat.Bmp);
bekomm ich das Bild zu sehen, wenn ich das Bild aber nur so
Bitmap bmp = new Bitmap(200, 300); bmp.SetPixel(x, y, Color.FromArgb((int)r, (int)g, (int)b));
erzeuge ohne es extra zu speichern bekomm ich nur ein weisses Bild.
Aber warum und wieso weiss ich nicht.
-
D.h. laden musst du das Bild nicht wieder, nur speichern?
Bye, TGGC \-/
-
Die BMP-Ladefunktion (die nicht von Dir ist?!?) macht wohl etwas mit dem BMP Format anders, was Du in Deinem "LowLevel-Painter" _nicht_ berücksichtigst...
-
Ich höre immer Laden, aber ich sehe nix wo geladen wird!
Bye, TGGC \-/
-
Laden war ein gutes Stichwort, ich hätt das Bitmap auch richtig laden sollen dann wärs auch gegangen.
Vielen Dank!
-
Ich denke du willst es grad nicht laden?
Quotenmausi schrieb:
Allerdings möchte ich das Bild direkt aus dem Speicher verwenden
Gewöhnt Euch doch bitte mal an, Eure Fragen etwas genauer zu stellen!
Bye, TGGC \-/
-
Ich wollte das Bild nicht speichern. Wenn ich laden geschrieben hab dann wars ein versehen aber soweit ich das jetzt gesehen hab hab ich nie geschrieben dass ich es nicht laden will sondern dass ich es nicht erst speichern will, aber egal. Gestimmt hat letztendlich die übergabe zwischen dem beiden Bitmap-Variablen nicht.
Muss jetzt nur noch hinbekommen, dass sich meine Bilder, wenn sie sich geändert haben, neu zeichnen.
-
Genau, egal, ich versuch bei nächstem mal dann nicht zu helfen und gut ist. Notiert.
Bye, TGGC \-/
-
Du hast mir geholfen, DANKE dafür. Hab nur richtiggestellt, dass vom Speichern und nicht vom Laden die rede war.