schnellste möglichkeit Bilder zu projizieren

  • VB.NET

Es gibt 48 Antworten in diesem Thema. Der letzte Beitrag () ist von domin1101.

    schnellste möglichkeit Bilder zu projizieren

    und zwar muss ich für einspiel möglichst viele grafiken gleichzeitig anzeigen lassen.
    zur zeit probier ich das mit system.drawing: rectangles, bitmaps, graphics(siehe: youtube.com/watch?v=2H00uzCsVMc )
    gibt es da eine schnellere Methode??
    _______________
    Kampf der Holzfäller_____________________TurtleRun_________
    Probier all das aus und stoppe die Zeit, die benötigt wird.
    Schneller wird es, wenn Di die Bilder kleiner machst, sie also weniger Speicherplatz benötigen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wie RodFromGermany schon sagste kannst du ja eine art Thumbnail oder ähnliches anzeigen.

    Zur Animation: Zeichnest Du in einem kurzen Intervall immer ein anderes Bild auf die gleiche Position?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Eistee“ ()

    Hi
    Außerdem kannst du, wenn du den Hintergrund nicht benötigst einfach gepufferte Graphics verwenden oder beim Bitmap zeichnen die Eigenschaft CompositingMode auf Drawing2D.CompositingMode.SourceCopy setzen. Das gilt auch für Bitmaps, die keinen Alphawert ungleich 255 besitzen und keine Farbmatrix.

    Gruß
    ~blaze~

    Eistee schrieb:


    Wie RodFromGermany schon sagste kannst du ja eine art Thumbnail oder ähnliches anzeigen.

    leider kann ich die bilder nicht viel kleiner machen weil ansonsten zuviel qualität verloren geht

    Eistee schrieb:


    Zur Animation: Zeichnest Du in einem kurzen Intervall immer ein anderes Bild auf die gleiche Position?
    ja

    ~blaze~ schrieb:

    Hi

    Außerdem kannst du, wenn du den Hintergrund nicht benötigst einfach gepufferte Graphics verwenden oder beim Bitmap zeichnen die Eigenschaft CompositingMode auf Drawing2D.CompositingMode.SourceCopy setzen. Das gilt auch für Bitmaps, die keinen Alphawert ungleich 255 besitzen und keine Farbmatrix.

    werde ich ausprobieren
    _______________
    Kampf der Holzfäller_____________________TurtleRun_________

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. anfang:
    3. G.Clear(Color.White) 'Form "löschen"
    4. Application.DoEvents()
    5. sRect = New Rectangle(494, 384, 291, 331)
    6. dRect = New Rectangle(x2, 100, 88, 99)
    7. If Str(zahl).Length = 2 Then 'laden eines Frames(bei dieser animation sind es insgesamt 30 Frames)
    8. '--- die nächsten 3 zeilen schauen nur so kompliziert aus, weil im dateinamen immer zwei bzw. drei nullen vor der Framezahl stehen -----
    9. bmp2 = System.Drawing.Bitmap.FromFile("nach links/000" + Str(zahl).Substring(1, Str(zahl).Length - 1) + ".jpg")
    10. Else
    11. bmp2 = System.Drawing.Bitmap.FromFile("nach links/00" + Str(zahl).Substring(1, Str(zahl).Length - 1) + ".jpg")
    12. End If
    13. If zahl > 30 Then
    14. zahl = 1
    15. Else
    16. zahl += 3
    17. End If
    18. G.DrawImage(bmp2, dRect, sRect, GraphicsUnit.Pixel) 'frame wird gezeichnet
    19. G = Graphics.FromImage(BB)
    20. BBG = Me.CreateGraphics 'BackBuffer(verhindert flimmern)
    21. BBG.DrawImage(BB, 0, 0, Me.Width, Me.Height)
    22. frp += 1 'dies wird für die Frames per Second anzeige benötigt
    23. GoTo anfang
    24. End Sub
    _______________
    Kampf der Holzfäller_____________________TurtleRun_________
    Ich bin zwar kein Profi und verstehe desshalb deinen Quellcode nichtmal vollständig xD aber es würde wohl schon viel helfen wenn du die Images nur einmal laden würdest mit "From File" und die dann in ein Array packst und von da aus dann zeichnest damit sparst du dir das die CPU die Dateien jedes mal von neuem auslesen muss.
    Falls du das schon so machst und ich nur deinen Quellcode falsch gelsen habe tut es mir leid und ich geh wieder in meine Noob-Ecke :D

    Ich habe übrigens gerade genau das selbe Problem und mir wurde geraten einfach die OpenGL in mein Projekt zu importieren und das darüber zu machen weil dann die Grafikkarte für das rendern der Grafik genutzt wird und nicht die CPU was ja schon sehr praktisch ist.
    Ich hab mir dann gleich CsGL downgeloadet und und in mein Projekt importiert. Ich kann auch darauf zugreifen allerdings hab ich keinen Schimmer wie ich OpenGL jetzt sage das es mir eine Bitmap an einen bestimmten Punkt in einer Bestimmten größe zeichnen soll. Bei mir kommt immer nur das Rote Kreuz auf weißem Hintergrund :(

    Also wenn uns da einer weiterhelfen könnte hätten wir das Problem glaube ich am elegantesten gelöst...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „CapsE“ ()

    So sieht jetzt aber nicht deine Code Formatierung im Visual Studio aus oder ?(

    Naja egal, soweit wie ich das verstanden habe, lädst du echt für eine Animation 20 verdammte Bilder :cursing:, guck dir das mal an:

    Dies ist ein Frameset, so kannst du eine ganze Animation in einem Bild laden.
    Du lädst das Bild am anfang im Spiel einmal und holst dir dann immer mit einem Ractangle, das passende Frame für die Animation herraus.
    Ok also erstmal danke für die schnellen antworten

    @Capse:
    Ist denn die methode mit opengl kompliziert

    @Eistee: meine animation hat nur deswegen soviele Bilder, weil sie auch viel länger dauert.
    Und die idee mit dem frameset ist genial... Ich hab dad auch schon mal in irgendeinem tutorial gesehen
    _______________
    Kampf der Holzfäller_____________________TurtleRun_________
    Domin, wie ich sehe, arbeitest du mit Graphics ;D
    Also mach mal bei Form1_Load das rein:


    Me.SetStyle(System.Windows.Forms.ControlStyles.UserPaint, True)
    Me.SetStyle(System.Windows.Forms.ControlStyles.OptimizedDoubleBuffer, True)
    Me.SetStyle(System.Windows.Forms.ControlStyles.AllPaintingInWmPaint, True)


    Das dürfte das Ruckeln ein-für-alle-mal beheben :)
    Und wenns bei dir immernoch flackert, dann hast du wohl ein übles Problem LOL! :D
    @Domin OpenGL ist angeblich einfach in der Handhabung ich habe allerdings nicht ein vernünftiges Tutorial dafür gefunden. Ich installiere gerade das DirectX SDK also quasi die Alternative zu OpenGL dafür gibt es haufenweise guter Anleitungen und Beschreibungen.
    Das ganze hat aber den Nachteil das DirectX nur auf Windowssystemen läuft. (zumindest standardmäßig ich weiß nicht ob man da was machen kann bei Mac und Co)
    so es läuft jetzt ziemlich flüssig.

    ich habe jetzt nur noch eine Frage:
    Mein Hintergrund soll eine Grasfläche sein. Sollte ich jetzt das viele kleine Grasflecken nebeneinander positionieren oder eine große Grasfläche für den Hintergrund benützen?
    _______________
    Kampf der Holzfäller_____________________TurtleRun_________
    Dafür würde ich Sprites und DirectX verwenden. Das läuft mit Texturen dann ähnlich ab, wie mit Bitmaps (die Sprite hat eine entsprechende Methode). Das müsste aber auch ähnlich mit OpenGL funktionieren (habe ich noch nie verwendet). Beachte beim Begin-Aufruf, dass du die entsprechenden Flags übergibst, damit Alpha-Blending aktiviert ist. Für DirectX gibts zum einen XNA und zum anderen Managed DirectX. Wenn dir DirectX 9 reicht (sollte es eigentlich) kannst du das ja verwenden. Erkundige dich einfach mal ein bisschen über die von mir genannten Themen, die dich interessieren - da wirst du fast sicher fündig.

    Gruß
    ~blaze~