Irgendwie muss ich die Leute ja anlocken =)
Also es gibt tatsächlich einen Parameter der den Bitmapheader festlegt. Nur ist da nichts zu machen. Ich hab alles versucht. RGB wirds sicher nimmer und wegen dem verkehrten Bild steht dort, wenn man die Höhe des Bildes mit einer negativen Zahl angibt, dann liest er beginnend mit dem top-left-pixel, ansonsten mit dem top-down-pixel, wie's ja bei mir is. Nur gibts eine Access-Violation, wenn ich die Höhe negativ angebe.. ahhh..
Beiträge von Swoncen
-
-
wow richtig gut. Naja ich kann das schwer beurteilen, ich hab nicht so viel am Hut mit 3D Modellierung..
-
Wie viele Semesterwochenstunden hast du eigentlich? *g*
-
Ich glaub du verstehst nicht was ich meine. Ich hab ein Programm geschrieben, welches AVI-Files einlesen soll (weil ich nichts anderes brauch) und ich brauch dann in meiner Datenstruktur die einzelnen Frames. Dazu les ich jedes Pixel des aktuellen Frames ein. Durch die oben genannte Funktion bekomm ich den Pointer auf das aktuelle Frame, nur sind die Daten dort anders gespeichert. Das hat jetzt nichts mit Photoshop o.ä zu tun. das Bild oben ist ein Frame eines Videos.
Und was meinst du mit "DV-Pal, 720x576 Pixels, Stereo, 16 Bit, 44,1 khz, Best Quality" ? -
Hallo!
Ich versuche mittels AVIStreamGetFrame Frames aus einem AVI-File auszulesen um sie weiter zu bearbeiten.
Die Funktion gibt mir einen Pointer zurück auf das aktuelle Frame. Das Problem ist, dass der Pointer auf das Pixel rechts unten im Bild zeigt und mein Bild daher verkehrt ist. Noch dazu ist das Bild in meiner Struktur in R-G-B gespeichert und ich bekomms in G-B-R von der Funktion zurück. Es sieht dann ungefähr so aus:
Weiß jemand eine Lösung? Wenn ich die meine Struktur umbau, dass ich zumindest die Farben richtig hinbekomm, bleibt noch immer das Problem mit dem Verkehrten Aufbau. Ich möcht auch nicht alle Pixel unbedingt neu in meine Datenstruktur reinkopieren, weils doch bei 25fps ziemlich viel is. Überseh ich irgendwas, oder isses wirklich aussichtslos mit der Funktion? -
-
Ich habs jetzt mit realloc versucht.. funktioniert auch nicht. Falls jemand eine Lösung weiß, bitte melden.
-
Hey nylia ich glaub ich hab dich vor kurzem im Audi MAX gsehn. Sitz du immer rechts im oberen Teil in der unteren Hälfte? *g*
-
-
Die Frauen liegen dir ja zu Füßen...
-
Ok, ich hab folgendes festgestellt: Die Variable ändert sich sicher schon in der Funktion, nur komischerweise erfolgt das document.write erst nach dem wait. Ich weiß nicht ob das jetzt alles klärt..
Code
Alles anzeigen<HTML><HEAD><TITLE>sds</TITLE> <SCRIPT TYPE="Text/JavaScript"> function changeColor() { document.getElementById("content").style.color = "#ff0000"; document.write(document.getElementById("content").style.color); wait(2000); } function wait(millis) { var start=new Date().getTime() do { var jetzt=new Date().getTime() } while(jetzt<start+millis) } </SCRIPT> </HEAD> <BODY onload="document.getElementById('content').style.color = '#000000'"> <B OnMouseOver="changeColor()">DRÜBER_DA</B><BR> <B id="content">test</B> </BODY> </HTML>
-
Rosetta?
-
Ist tatsächlich so.. komisch, ist mir bis jetzt nie aufgefallen.
-
Hallo!
Ich hab folgendes Problem: Ich möchte ein Bild mittels GDI+ in den Speicher laden. Danach speicher ich mir die Pixeldaten in meiner Datenstruktor (linear im Speicher) indem ich alle Pixel einzeln rüberkopier und dann mach ich weiter mit meiner Datenstruktur. Das Problem ist, dass es schon eine Zeit braucht, auch wenn ich den Algorithmus schon sehr optimiert habe. Jetzt bin ich aber zu der Idee gekommen, dass ich einfach den Daten-Pointer von der Instanz der Klasse "Bitmap" von der GDI+ mittels LockBits und UnlockBits hole und meinen Pointer einfach auf diesen Speicher zeigen lasse. Die Struktur ist genau dieselbe, und es funktioniert auch. Somit hab ich eine echt extreme Zeitersparniss, trotzdem funktionierts nicht wirklich.. Das Problem ist jetzt, dass das "Bitmap" Objekt wieder gelöscht wird und der Speicher nicht mehr reserviert ist und mit der Zeit schreib ich irgendwann mal auf verbotenem Speicher und alles endet in einer AccessViolation. Mein Code zur veranschaulichung:
Code
Alles anzeigen[size=10][COLOR=blue]VS_EImageStatus[/COLOR] VS_Image::LoadImage([COLOR=blue]WCHAR[/COLOR]* [COLOR=gray]wc_FileName[/COLOR]) { [COLOR=blue]GdiplusStartupInput[/COLOR] [COLOR=gray]gdiplusStartupInput[/COLOR]; [COLOR=blue]ULONG_PTR[/COLOR] [COLOR=gray]gdiplusToken[/COLOR]; GdiplusStartup(&[COLOR=gray]gdiplusToken[/COLOR], &[COLOR=gray]gdiplusStartupInput[/COLOR], NULL); [COLOR=blue]Bitmap[/COLOR]* [COLOR=gray]InputImage[/COLOR] = [/SIZE][size=10]new[/SIZE][size=10] [COLOR=blue]Bitmap[/COLOR]([COLOR=gray]wc_FileName[/COLOR]); [COLOR=blue]uint32[/COLOR] [COLOR=gray]uiWidth[/COLOR] = [COLOR=gray]InputImage[/COLOR]->GetWidth(); [COLOR=blue]uint32[/COLOR] [COLOR=gray]uiHeight[/COLOR] = [COLOR=gray]InputImage[/COLOR]->GetHeight(); [/SIZE][size=10] [COLOR=blue]this[/COLOR][/SIZE][size=10]->AllocateImage([COLOR=gray]uiWidth[/COLOR], [COLOR=gray]uiHeight[/COLOR], 3); [COLOR=blue]uint8[/COLOR]* [COLOR=gray]pImage[/COLOR] = [/SIZE][size=10][COLOR=blue]this[/COLOR][/SIZE][size=10]->GetDataPtr(); [COLOR=blue]uint32[/COLOR] [COLOR=gray]uiStep[/COLOR] = [/SIZE][size=10][COLOR=blue]this[/COLOR][/SIZE][size=10]->GetWidthStep(); [COLOR=blue]Rect[/COLOR] *[COLOR=gray]pRect[/COLOR] = [/SIZE][size=10]new[/SIZE][size=10] Rect(0,0,[COLOR=gray]uiWidth[/COLOR],[COLOR=gray]uiHeight[/COLOR]); [COLOR=blue]BitmapData[/COLOR] *[COLOR=gray]pData[/COLOR] = [/SIZE][size=10]new[/SIZE][size=10] [COLOR=blue]BitmapData[/COLOR](); InputImage->LockBits([COLOR=gray]pRect[/COLOR], 0, [COLOR=indigo]PixelFormat24bppRGB[/COLOR], [COLOR=gray]pData[/COLOR]); [/SIZE][size=10][COLOR=green]// this[/COLOR][/SIZE][size=10][COLOR=green]->SetDataPtr((uint8*)pData->Scan0);[/COLOR] [/SIZE][size=10][COLOR=green]// this[/COLOR][/SIZE][size=10][COLOR=green]->SetWidthStep(pData->Stride);[/COLOR] [/SIZE][size=10] for[/SIZE][size=10]([COLOR=blue]uint32[/COLOR] [COLOR=gray]nJ[/COLOR]=0;[COLOR=gray]nJ[/COLOR]<[COLOR=gray]uiHeight[/COLOR];[COLOR=gray]nJ[/COLOR]++)[/SIZE] [size=10] { [/SIZE][size=10] for[/SIZE][size=10]([COLOR=#0000ff]uint32[/COLOR] [COLOR=#808080]nI[/COLOR]=0;[COLOR=#808080]nI[/COLOR]<[COLOR=#808080]uiWidth[/COLOR];[COLOR=#808080]nI[/COLOR]++) { *((([COLOR=#0000ff]uint8[/COLOR]*) [COLOR=#808080]pImage[/COLOR] + 0 + nJ * [COLOR=#808080]uiStep[/COLOR]) + (nI*3)) = *((([COLOR=#0000ff]uint8[/COLOR]*) [COLOR=#808080]pData[/COLOR]->Scan0 +0+ nJ * [COLOR=#808080]pData[/COLOR]->Stride) + ([COLOR=#808080]nI[/COLOR]*3)); *((([COLOR=#0000ff]uint8[/COLOR]*) [COLOR=#808080]pImage[/COLOR] + 1 + nJ * [COLOR=#808080]uiStep[/COLOR]) + (nI*3)) = *((([COLOR=#0000ff]uint8[/COLOR]*) [COLOR=#808080]pData[/COLOR]->Scan0 +1+ nJ * [COLOR=#808080]pData[/COLOR]->Stride) + ([COLOR=#808080]nI[/COLOR]*3)); *((([COLOR=#0000ff]uint8[/COLOR]*) [COLOR=#808080]pImage[/COLOR] + 2 + nJ * [COLOR=#808080]uiStep[/COLOR]) + (nI*3)) = *((([COLOR=#0000ff]uint8[/COLOR]*) [COLOR=#808080]pData[/COLOR]->Scan0 +2+ nJ * [COLOR=#808080]pData[/COLOR]->Stride) + ([COLOR=#808080]nI[/COLOR]*3)); } } InputImage->UnlockBits(pData); GdiplusShutdown(gdiplusToken); [/SIZE][size=10][COLOR=#0000ff] return[/COLOR][/SIZE][size=10] IMAGE_OK; } [/SIZE]
In der Schleife wird normalerweise kopiert, aber ich möchte ja nur den Pointer haben, damits schneller geht (auskommentiert).
Die Frage ist jetzt: Wie kann ich mir den Pointer holen, sodass der Speicher nicht wieder für alle beschreibbar wird? Sozusage den Speicher wieder reservieren? ich wüsst nichtmal, wonach ich im Google dafür suchen sollte. Bitte um Rat. -
Versteh ich nicht.. Du meinst du setzt irgendwo in deiner Funktion die globale Variable auf einen Wert und der ändert sich erst zu diesem Wert, wenn du aus der Funktion draussen bist? Wenn ich das so richtig verstanden hab, dann poste mal bitte diese Funktion, denn bei mir gibts so ein Problem nicht.
btw.: Warum hast du in der do-while Schleife noch dieses "var"? Hast die Variable ja schon deklariert. -
Ich versteh auch nichts? Was genau hast du auf deiner Seite mit php programmiert?
-
Ich weiß auch nicht wo der Fehler liegen sollte. Sag am besten welches Bild und welcher Text. Und dann, was du gerne haben würdest..
-
Also wenn du keine fertigen USB-Treiber hast, bist schon arm dran. Wenn du USB-Treiber dafür findest, gibts auch sicher eine Dokumentation wie der Treiber funktioniert bzw. wie er zu implementieren ist. Ich bin zwar kein technischer Informatiker, aber hab schon mal an so einem ähnliches Projekt gearbeitet. Sag doch mal das genaue Modell und Hersteller usw.
-
Also mit aussaugen hab ich keine guten Erfahrungen. Der Staub klebt oft so stark dran, dass du nicht viel raussaugen kannst. Bei meinem Stand-PC ist es sogar passiert, dass der Kühler plötzlich lauter ist und ab und zu brummt, da durchs ansaugen anscheinend der Ventilator ein bisschen verrutscht ist. Das ist eine heikle Sache und ich würds keinem raten, auch wenns bei admes super ging.
-
Bei meinem Notebook klebt bei der Öffnung unten ein Pickerl, dass zerreissen würde, wenn ichs aufmache. Somit verfällt die Garantie. Das ist bei den meisten Laptops so, wenn nicht bei allen.
EDIT: Das hat mich aber nicht aufgehalten ihn aufzumachen, wie mein BIOS kaputt wurde und Gericom nicht antwortete auf Supportanfrage :distur: