spora ilość obrazków przewijających się w długim oknie

0

Postaram się jak najdokładniej opisać mój problem bo jest dość nietypowy
na głównym oknie mam datagridview i dataset w których trzymam ścieżki do obrazków.
Obrazków może być od kilkudziesięciu do kilkuset.
Mam też 3 przyciski /stop play pause
drugie okno to okno odtwarzania i tu zaczynają się schody.
wymiary okna w pikselach to 4608x96
obrazki z listy muszę wyświetlać w postaci płynącej kolejki z lewej do prawej z możliwością regulacji prędkości przewijania.
Oczywiście najpierw przeskalowane proporcjonalnie do wysokości 96.
GDI albo przesuwanie pictureboxów raczej odpada ze względów wydajnościowych
myślałem o XNA lub czymś podobnym ale nie wiem nawet jak spiąć WFA z XNA
Nie miałam zbyt wiele doświadczenia z xna directx czy opengl.
z góry zaznaczę że maszyna do odtwarzania sprzętowo będzie mocnym kombainem na i7 albo xeonie z mocną grafiką.

0

Witam ponownie
zrobiłem to w ten sposób:
złożyłem wszystkie obrazki w jeden długi
potem w tikach zegara odświeżam okno (doublebuffer) i ndpisuje Painta
w ten sposób

 
 private void Plansza_Paint(object sender, PaintEventArgs e)
        {
            e.Graphics.DrawImage(Abmp, locationX1, 0);
            e.Graphics.DrawImage(Abmp, locationX2, 0);
            locationX1 = locationX1 + 2;
            locationX2 = locationX2 + 2;




       
                if (locationX1 == 0)
                {
                   locationX2 = -Abmp.Width; 
                }

  
                if (locationX2 == 0)
                { 
                    locationX1 = -Abmp.Width; 
                }
  
   

 
        
        }

Wydajność pozostawia wiele do życzenia
podobnie jest jak przesuwam 2 pictureboxy
Jeśli dysponujecie jakimiś pomysłami to proszę o podpowiedź

0

A jak to zapisać w dX lub openGL ?

0

drugie okno to okno odtwarzania i tu zaczynają się schody.
wymiary okna w pikselach to 4608x96

gwoli ścisłości: i całe to okno jest widoczne dla użytkownika?

0

Całe jest widoczne na 3 lub 4 monitorach

samo przewijanie obrazków w zasadzie zrobiłem w DX
w ten oto sposób korzystając z jakiegoś sampla

       protected override void OnRender(WindowRenderTarget renderTarget)
        {
            if (this._image != null)
            {
                renderTarget.Transform = Matrix3x2.Translation( locationX1,0);
             
         
                SizeU imageSize = this._image.PixelSize;
                double scale = Math.Min((double)(ClientSize.Width ) / imageSize.Width, (double)(ClientSize.Height ) / imageSize.Height);
                int imageWidth = (int)(imageSize.Width * scale);
                int imageHeight = (int)(imageSize.Height * scale);
                RectF imageBounds = new RectF((ClientSize.Width - imageWidth) / 2, (ClientSize.Height - imageHeight) / 2, imageWidth, imageHeight);
         
           

                renderTarget.DrawBitmap(this._image, imageBounds, 1, BitmapInterpolationMode.Linear);
                if (ShowBorder)
                    renderTarget.DrawRect(this._borderBrush, 8, imageBounds);

                //---------------------------------------------
                renderTarget.Transform = Matrix3x2.Translation(locationX2, 0);

          



                renderTarget.DrawBitmap(this._image, imageBounds, 1, BitmapInterpolationMode.Linear);
                if (ShowBorder)
                    renderTarget.DrawRect(this._borderBrush, 8, imageBounds);
            }
        } 

pozostaje mi złapanie obiektu Bitmap z GDI w obiekcie Bitmap z DX
bo mój sampel ma tylko dopisaną metode Bitmap.LoadBitmap(string path)

0

to może kilka okien, mniejszych, na każdym ekranie osobne? to się może, wbrew pozorom, okazać wydajniejsze.

0
Azarien napisał(a):

to może kilka okien, mniejszych, na każdym ekranie osobne? to się może, wbrew pozorom, okazać wydajniejsze.

czyli sugerujesz takie rozwiązanie picturebox[n] ???

1 użytkowników online, w tym zalogowanych: 0, gości: 1