Încărcarea graficii într-o pagină web

Utilizarea metodei Image.Save () pentru a scrie o imagine în fluxul de răspuns conduce la suprascrierea oricărei informații pe care schema ASP.NET ar folosi-o altfel.





Din fericire, există o soluție mai simplă. Puteți utiliza descriptorul HTML sau controlul Imagine Web, dar în loc să specificați o imagine statică ca sursă, trebuie să vă legați de fișierul .aspx care generează imaginea dinamică.

De exemplu, luați în considerare orice grafic creat de GDI + în articolul precedent. Acesta este stocat într-un fișier și scrie SimpleDrawing.aspx imagine generată în mod dinamic în fluxul de răspuns (în exemplele din fluxul de fișiere). Imprimați imaginea dinamică pe o altă pagină ar putea fi prin adăugarea la ea și a instala SimpleDrawing.aspx de control al imaginii web la imageurl valoarea proprietății (un fișier generat). Apoi, puteți adăuga alte controale sau chiar mai multe controale de imagine care se leagă de același conținut.







Figura de mai jos prezintă un exemplu în care sunt utilizate două descriptori , care indică fișierul SimpleDrawing.aspx, precum și un număr de controale Web suplimentare ASP.NET. situate între ele:

Încărcarea graficii într-o pagină web

Folosind formatul PNG

PNG este un format universal care oferă întotdeauna o calitate superioară, combinând compresia fără pierderi a imaginilor GIF cu o gamă largă de suporturi de culoare pentru JPEG. Unele browsere (în special versiunile mai vechi ale Internet Explorer) afișează incorect imaginile PNG când revin dinamic din pagină. În loc de conținutul imaginii, utilizatorul primește un mesaj cu o sugestie de a descărca conținutul imaginii și de ao deschide într-un alt program. Pentru a rezolva această problemă, puteți aplica abordarea discutată anterior cu un descriptor .

O altă problemă cu generarea dinamică a imaginilor PNG este incapacitatea de a folosi metoda Bitmap.Save () discutată în articolul precedent. Response.OutputStream este un flux liniar, adică datele trebuie să fie scrise secvențial de la început până la sfârșit. Pentru a crea un fișier PNG, software-ul .NET trebuie să poată naviga în fișier înainte și înapoi, ceea ce necesită un fir care poate oferi o tranziție către anumite poziții.

Soluția este destul de simplă. În loc de a efectua o economisire direct System.IO.MemoryStream flux Response.OutputStream aveți nevoie pentru a crea un flux care este un buffer de date în memorie. Call Bitmap.Save (), pentru a salva imaginea în fluxul MemoryStream, și apoi se înregistrează în fluxul MemoryStream Response.OutputStream.

Codul necesar implementării acestei soluții, cu condiția ca spațiul de nume System.IO să fi fost importat, are următorul aspect:

Transferul informațiilor către imagini dinamice

Atunci când se generează grafică în pagini web, informațiile pot fi trimise de la pagină la codul care generează efectiv grafica, pentru a crea imagini cu adevărat dinamice. Următorul exemplu creează o listă legată de date care afișează o miniatură a fiecărui bitmap stocat în acest director. Rezultatul final este prezentat în figura de mai jos:

Încărcarea graficii într-o pagină web

Această pagină ar trebui să fie formată din două părți: o pagină care conține un control GridView și o pagină care vizualizează dinamic o singură miniatură. Pentru a popula lista, pagina GridView va invoca în mod repetat pagina de schiță (folosind descriptorii ).

Este logic să dezvoltați mai întâi o pagină care creează o schiță. În acest exemplu, pagina este numită ThumbailsViewer.aspx. Pentru a face această componentă cât mai universal posibilă, nu trebuie să codificați rigid nicio informație despre directorul utilizat sau dimensiunea schiței. În schimb, această informație va fi obținută folosind trei argumente șir la interogare.

La prima descărcare a paginii, trebuie să verificați dacă toate aceste informații sunt furnizate. După primirea setului de date de bază, obiectele Bitmap și Graphics pot fi create în mod obișnuit. În acest caz, dimensiunea obiectului Bitmap trebuie să se potrivească mărimii schiței, deoarece nu este necesar să adăugați conținut suplimentar. Crearea unei schițe nu este deosebit de dificilă. Este suficient să încărcați imaginea (utilizând metoda statică Image.FromFile) și apoi să o scoateți pe suprafața desenului. Când desenați o imagine, trebuie să specificați un punct de pornire (0, 0), precum și înălțime și lățime. Înălțimea și lățimea corespund dimensiunii obiectului Bitmap. Clasa grafică mărește automat imaginea în funcție de aceste dimensiuni, aplicând anti-aliasing pentru a crea o schiță de înaltă calitate.

Următorul pas necesar este să utilizați această pagină în pagina care conține controlul GridView. Ideea de bază care stă la baza paginii de bază este că utilizatorul va introduce calea către director și va da clic pe butonul de trimitere. În acest moment, codul poate efectua unele lucrări cu clasele de spațiu de nume System.IO. În primul rând, va trebui să creați un obiect DirectoryInfo care reprezintă directorul selectat de utilizator. În al doilea rând, utilizând metoda DirectoryInfo.GetFiles, trebuie să obțineți un set de obiecte FileInfo care reprezintă fișierele din acest director. În cele din urmă, codul trebuie să lege o matrice de obiecte FileInfo la GridView, așa cum se arată în următorul exemplu:







Trimiteți-le prietenilor: