DDS Format ?
-
Bin Dir ja wirklich dankbar, daß Du mir helfen willst, aber leider bin ich wahrscheinlich ein "hoffnungsloser Fall". Wie gesagt, habe ich mit Grafik noch nichts gemacht außer ein Bild eingelesen, aber was in der VCL integriert ist. Imgage1->Picture->LoadFromFile... Da ich kein wirklich für mich nachvollziehbares Beispiel besitze, mit dem ich experimentieren kann, um gewisse Ding, Zusammenhänge zu verstehen, fällt es mir schwer die für Dich 'normalsten Dinge' nachzuvollziehen. Ich suche seit Tagen im Internet und in Bücher, aber meist sind es riesen Projekte (z.B. NVIDIA Utility) und dann in VC++, mit jeder Menge unüberschaubarer #include ... .h Dateien, und somit kann ich als Anfänger keinen Überblick bekommen. Hatte Dir etwas per e-mail geschickt. Kann man damit was anfangen ?
p.s.
Beispiel 'Tunnel' ist in VC++ und keinerlei printf Anweisungen. Sorry, daß ich mich so 'blöd' anstelle.
mfg
OldMan
-
du solltest erst mal herausfinden wie die in die PictureBox überhaupt etwas zeichnen kannst - bestimmt gibts da fertige Funktionen zum Zeichnen von einzelnen Pixel, Linien, Kreisen, Rechtecken und Polygonen - spiel damit mal rum
am schönsten wäre es natürlich wenn du herausfinden würdest, dass BMP und JPG von einer bestimmten Basisklasse abgeleitet sind die z. B. Image (Interfaceklasse) heißt - diese Image Klasse musst du dann konkret für das DDS Format implementieren
wie das genau geht können dir die Leute in einem Borland VCL Forum sagen - im schlechtesten fall musst du wirklich Pixelweiße jedes Bildelement in die Picture Box zeichnen mit einer Methode wie SetPixel (wie die genau heißt kann ich dir nicht sagen - bin keine wandelnde Onlinedokumentation ;))
beim DDS Format sehe ich eine Schwierigkeit: es gibt verschiedene Kompressionen. Bin mir da nicht ganz sicher aber ich glaube da was gelesen zu haben. Solange das nur RLE ist, ist das kein Problem aber wenn den Fourier Entwicklung und ähnliche Sachen kommen fängt der Spaß richtig an
-
bestimmt gibts da fertige Funktionen zum Zeichnen von einzelnen Pixel, Linien, Kreisen, Rechtecken und Polygonen
soweit ich das mitbekommen habe ist das
Canvas->Brush... Canvas->FillRec.... Canvas->Draw... Canvas->Pixel.... usw.Weist Du wo ich die impletierten Grafikformate der VCL finde ? um da evtl. zu sehen wie es definiert ist.
-
Weist Du wo ich die impletierten Grafikformate der VCL finde ? um da evtl. zu sehen wie es definiert ist.
die sind bestimmt nicht offen. Aber in der Doku könnte stehen von welchem Interface diese Klassen abgeleitet sind.
Wenns nicht auf Geschwindigkeit ankommt würde ich Canvas->Pixel.... nutzen - du weißt ja wie man die Pixeldaten in den Speicher lädt... jetzt musst du in ner for Schleife nur über deinen Speicherbuffer drüberlaufen und jedes Pixel "rausmalen"
for(int x = 0; x < breite_desbildes; x++) for(int y = 0; y < höhe_desbildes; y++) Canvas->DrawPixel(x, y, Speicherbuffer[x+y*breite]);
-
die sind bestimmt nicht offen
schade.
verstehe ich das jetzt richtig, das nach dem Header, den Du am Anfang eingelesen und als Info ausgegeben hast, die eigentlichen Bilddaten kommen.
Wenn ich die jetzt einlese und an Draw->Pixel übergebe, kommen dann die richtigen Informationen ? Wie verhält es sich z.B. bei kompremierten Daten. Ist mir etwas schleierhaft, werde es aber probieren.Danke

-
verstehe ich das jetzt richtig, das nach dem Header, den Du am Anfang eingelesen und als Info ausgegeben hast, die eigentlichen Bilddaten kommen.
nö - da kommen noch mehr daten - z. b. das Bildformat - wie die Pixel angeordnet sind- wieviel Bits für Rot Grün blau zur verfügung stehen
wie verhält es sich z.B. bei kompremierten Daten
diese musst du erst dekomprimieren - falls die mit bekannten standards komprimiert sind z. B. zip format gibt es dazu freie bibliotheken, die dir die arbeit abnehmen - musst du selber nachlesen unter dem link den ich gepostet habe wie das komprimiert ist
kannst du mal den Link zu dem Quellcode von dem Nvida Demo posten?
-
Das ist nicht nur ein Demo. Ist auch mit Quellcode - komme aber nicht klar damit, da wieder VC++.

http://download.nvidia.com/developer/NVTextureSuite/DDS_Utilities_7.83.0629.1500.exe
-
oder hier ein DDS Viewer (leider ohne Quellcode) aber fantastisch.
http://developer.nvidia.com/object/windows_texture_viewer.html
-
struct DdsLoadInfo { bool compressed; bool swap; bool palette; unsigned int divSize; unsigned int blockBytes; GLenum internalFormat; GLenum externalFormat; GLenum type; }; DdsLoadInfo loadInfoDXT1 = {true, false, false, 4, 8, GL_COMPRESSED_RGBA_S3TC_DXT1}; DdsLoadInfo loadInfoDXT3 = {true, false, false, 4, 16, GL_COMPRESSED_RGBA_S3TC_DXT3}; DdsLoadInfo loadInfoDXT5 = {true, false, false, 4, 16, GL_COMPRESSED_RGBA_S3TC_DXT5}; DdsLoadInfo loadInfoBGRA8 = {false, false, false, 1, 4, GL_RGBA8, GL_BGRA, GL_UNSIGNED_BYTE}; DdsLoadInfo loadInfoBGR8 = {false, false, false, 1, 3, GL_RGB8, GL_BGR, GL_UNSIGNED_BYTE}; DdsLoadInfo loadInfoBGR5A1 = {false, true, false, 1, 2, GL_RGB5_A1, GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV}; DdsLoadInfo loadInfoBGR565 = {false, true, false, 1, 2, GL_RGB5, GL_RGB, GL_UNSIGNED_SHORT_5_6_5}; DdsLoadInfo loadInfoIndex8 = {false, false, true, 1, 1, GL_RGB8, GL_BGRA, GL_UNSIGNED_BYTE};wenn ich das so übernehme, meckert mein BCB bei 'DdsLoadInfo loadInfo.... . Klasseelement kann hier nicht initialisiert werden !

-
trägt ein Bezeichner das Präfix GL_ so weißt das darauf hin, dass es ein Bezeichner aus OpenGL ist
-
Zur korrekten Implementierbarkeit kannst Du ja hier mal im Borland Forum fragen.

-
Vertexwahn schrieb:
trägt ein Bezeichner das Präfix GL_ so weißt das darauf hin, dass es ein Bezeichner aus OpenGL ist
dachte ich mir und hatte auch
#include <gl\gl.h> #include <gl\glu.h>eingebunden. trotzdem ist wahrscheinlich der Syntax falsch, da VC. In BCB werden irgendwie die Structurelemente anders deklariert.