9 messaggi dal 21 gennaio 2011
Salve a tutti,
ho un problema che spero mi aiutiate a risolvere.
Ho una webform dove sono presenti una textbox, un componente button, un componente image ed un reportviewer.
In pratica alla pressione del pulsante, nella componente image, viene generata l'immagine del
qrcode corrispondente al testo che si trova nella textbox.
Ora dovrei stampare l'immagine attraverso il reportviewer.
E qui sta il problema.
Non ho capito come passare l'immagine nel reportviewer.
Mi date un aiuto?
In giro ho visto che bisognerebbe passare l'immagine come parametro nel reportviewer ma, prima,
l'immagine andrebbe convertita in base64, cosa che non sono riuscito a fare in quanto tutti gli
esempi che ho visto riguardano immagini salvate in cartelle, quindi già esistenti.
Non è questo il caso poichè, l'immagine viene generata a runtime.
Utilizzo visual studio 2010 e c#
Grazie in anticipo per l'aiuto
Modificato da alec19700 il 04 novembre 2018 19.33 -
11.050 messaggi dal 09 febbraio 2002
Contributi
Ciao,
anche se l'immagine è generata al volo, la puoi pur sempre salvare su un file temporaneo in modo da ricondurre il tuo caso a quelli che hai trovato negli esempi.

In alternativa, se ci fai caso, il metodo Save dell'oggetto Bitmap possiede un overload che ti consente di salvare su Stream, eccolo qui:
https://docs.microsoft.com/en-us/dotnet/api/system.drawing.image.save?view=netframework-4.7.2#System_Drawing_Image_Save_System_IO_Stream_System_Drawing_Imaging_ImageFormat_

Puoi passare l'istanza di un MemoryStream in modo che i dati vengano salvati in memoria anziché su disco. Poi leggi i byte dall'oggetto MemoryStream e li converti in base64. Ecco un esempio di come usare il MemoryStream.
https://stackoverflow.com/questions/7629887/difficulty-saving-image-to-memorystream#answer-39885666


ciao,
Moreno

Enjoy learning and just keep making
9 messaggi dal 21 gennaio 2011
Buongiorno,
grazie della celere risposta.
Ho guardato i riferimenti che mi hai mandato, ne ho preso spunto ma sorge un'altra difficoltà.
In pratica ho realizzato quanto segue nel file .cs :

- ho inserito le direttive:
using System.Drawing;
using System.Drawing.Imaging;


- poi la funzione che restituisce la stringa corrispondente all'argomento passato. ( è corretto il codice?... ):

protected string ImgToBase64(System.Drawing.Image image)
{
using (MemoryStream ms = new MemoryStream())
{
// Convert Image to byte[]
image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] imageBytes = ms.ToArray();

// Convert byte[] to Base64 String
string base64String = Convert.ToBase64String(imageBytes);
return base64String;
}
}


infine , nella funzione relativa al pulsante:

protected void Button1_Click(object sender, EventArgs e)
{
// Img1 è il controllo Image sulla pagina

string immagineconvertita = ImgToBase64(Img1);

ReportViewer1.Reset();
ReportViewer1.LocalReport.ReportPath = "Reportqrcode.rdlc";
ReportParameter[] parametri = new ReportParameter[1];
parametri[0] = new ReportParameter("Parameter1", immagineconvertita);
ReportViewer1.LocalReport.SetParameters(parametri);
}

A questo punto, già quando vado a dichiarare la stringa immagineconvertita, su ImgToBase64(Img1),vengo avvisato dal fumetto che compare, che:
system.web.UI.WebControl.Image.qrcodemanager.Img1
Errore:
La corrispondenza migliore del metodo di overload per 'qrcodemanager.ImgToBase64(System.Drawing.Image)' presenta alcuni argomenti non validi.

Cioè è sbagliato il parametro che passo alla funzione ImgToBase64. E come andrebbe passato il componente Img1?
Come posso risolvere la cosa?
Magari qualche esempio andrebbe meglio?

Grazie mille....come sempre.....

Mario
11.050 messaggi dal 09 febbraio 2002
Contributi
Ciao Mario,


// Img1 è il controllo Image sulla pagina

Ok, da questo mi rendo conto di non aver capito cosa intendi quando dici che "l'immagine è creata a runtime".
Puoi far vedere il codice che usi per crearla a runtime?

ciao,
Moreno
Modificato da BrightSoul il 06 novembre 2018 17.16 -

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.