ich müsste ein TBitmap vergrössern und stretchen, also sagen wir ich hab en bitmap mit 50x40 und will es auf ne grösse von 100x100 bringen. ich kenn zwar canvas.stretchdraw, aber das klappt nicht so wirklich. wie muss ich das verwenden, bzw. was kann ich sonst machen?
ich will ne heightmap in voxeldaten umwandeln, egal wie jetzt muss ich hauptsächlich einzelne pixel ansprechen können (so getan mit einwiebeschriebenvergrössertesbitmap.canvas.pixels[x, y]) und das klappt eben nicht... gibts da ne andere möglichkeit der bildverarbeitung (kein tbitmap zb)?... sollte alles runtimemäßig verwirklichbar sein also am besten keine komponenten oder so (wenn die von code geseteuert auch so gut funzen ists auch gut).
Registriert: Mo Feb 24, 2003 18:19 Beiträge: 165 Wohnort: Cologne
Hmm... ich weiss jetzt nicht ob das unbedingt hilfreich sein könnte, aber wenn du die einzelnen Pixeldaten auslesen willst könnte der Dreisatz helfen:
also für X dann:
(xPos * 50) DIV 100
und für Y:
(yPos * 40) DIV 100
Wenn du das alles ohne Komponenten machen willst empfiehlt es sich entweder:
1. Ein tool zu schreiben was das Bitmap in dein eigenes Format umwandelt was du dann ohne Komponente in deinem eigentlichen Programm laden kannst
2. Die BMP's roh einzulesen. das ist aber ein wenig viel aufwand und somit doof =)
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Ich versteh dich nicht ganz. Eine Heightmap zu stretchen bringt doch im Endeffekt rein gar nix, also spielt die Größe deiner Heightmap keine Rolle. Was genau willst du denn überhaupt machen?
naja sagen wir mal ich habe ein feld von 100 x 100 voxel mit höhen zu füllen, hab aber nur en bild der grösse 40 x 40 als grundlage, dann ist es doch sinvoll das bild einfach auf 100x100 zu stretchen (mit interpolation) oder nicht? ich weiss jetzt natürlich nicht wie gut tbitmap dafür geeignet ist...
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Dann kannst du TBitmap vergessen. Da werden beim Stretchen keine Pixel interpoliert. Interpolieren musst du dann im Endeffekt selbst, entweder über Canvas.Pixel (Schlecht, da sehr langsam) oder Scanlines (besser, aber komplizierter). Evtl reicht dann schon ein 3x3-Blur oder so.
Aber am besten lässt du dann TBitmap links liegen, oder schnappst dir nur davon die Pixeldaten über Scanline, legst die in nem eigenen Array ab und kannst die dann nach Herzenslust interpolieren.
P.S. : Ich würde das (wenns nicht dynamisch ist) allerdings schon vorher in nem Bildbearbeitungsprogramm machen, denn die können sowas ja schon von Haus aus.
also ich hab jetzt eben wieder die dreisatz lösung
ich hab es mit getestet mit nem grösseren bild als das voxelfeld.
mit der dreisatz lösung ist es viel pixeliger, als wenn ich ein bitmap auf diese grösser stretche (von zu groß auf kleinere bildgrösse geht ja seltsamerweise), aber bin trotzdem zufrieden.
Graphics32 (www.g32.org) bietet wunderbare und sehr schnelle Bildmanipulationsmethoden (u.a. extrem hochwertige Resizing-Routinen). Das ganze liegt mit BGRA sogar mit einem fuer OpenGL (ab 1.2) direkt verdaubaren Format im Speicher (einfach TBitmap32.Bits an die entsprechenden GL-Befehle ubergeben).
Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.