[ASP.NET] System.Drawing.Bitmap op scherm tonen

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Brynnie
  • Registratie: Februari 2001
  • Niet online
Wellicht een simpele vraag voor velen jullie, maar toch:

Ik heb in Visual Studio (VB.Net) een stukje code wat een QR code genereert. Ik heb het gekopieerd uit een stuk code dat oorspronkelijk voor een windows applicatie gemaakt werd.

Mijn code:
code:
1
2
3
4
5
6
<%@ Import Namespace="System.Drawing.Imaging" %>
...
Dim qrGenerator As New QRCoder.QRCodeGenerator()
Dim qrCode As QRCoder.QRCodeGenerator.QRCode = qrGenerator.CreateQrCode("Test me", QRCoder.QRCodeGenerator.ECCLevel.H)
Response.Write(qrCode.GetGraphic(20))
qrCode.GetGraphic(20).Dispose()


De oorspronkelijke code wees de bitmap uiteindelijk toe als achtergrond aan een Windows picturebox
Bron: http://en.code-bude.net/2...implementation-in-csharp/
en op GitHub: https://github.com/codebude/QRCoder

Oorspronkelijke code:
code:
1
2
3
Dim qrGenerator As New QRCodeGenerator()
Dim qrCode As QRCodeGenerator.QRCode = qrGenerator.CreateQrCode(textBoxQRCode.Text, QRCodeGenerator.ECCLevel.Q)
pictureBoxQRCode.BackgroundImage = qrCode.GetGraphic(20)

Bovenstaande code werkt correct als ik ze compile in Visual Studio. De juiste componenten zijn geïnstalleerd en worden correct aangeroepen.

Het enige wat bij mij in de aspx pagina op het scherm verschijnt, is:

code:
1
System.Drawing.Bitmap


Ik gebruik zoals je kan zien de Response.Write output methode, maar dat lijkt me dus niet het beoogde resultaat te geven.

Weet iemand hoe je er in VB.Net aspx ervoor zorgt dat je de bitmap correct in de browser laat verschijnen? Of moet ik ze eerst opslaan en vervolgens als <img> terug tonen in de browser?

Ik zou eerlijk gezegd zelfs niet weten op welke Google termen je in dit geval best zoekt.

<Disclaimer>Ik ben een "autodidact" in Visual Studio en probeer alles met vallen en opstaan, heb dus geen programmeer ervaring in deze...</Disclaimer>

Acties:
  • 0 Henk 'm!

  • Rafe
  • Registratie: Mei 2002
  • Laatst online: 27-06 13:12
Brynnie schreef op zondag 21 december 2014 @ 17:57:
Weet iemand hoe je er in VB.Net aspx ervoor zorgt dat je de bitmap correct in de browser laat verschijnen? Of moet ik ze eerst opslaan en vervolgens als <img> terug tonen in de browser?
Ik heb geen ervaring met VB.net maar een img-tag lijkt me hier wel nodig. Je zal iets met je bitmap-object moeten doen zodat het bijvoorbeeld als PNG beschikbaar wordt. Die kan je dan opslaan of base64 encoden in de img-tag met het data URI scheme.

Acties:
  • 0 Henk 'm!

  • Brynnie
  • Registratie: Februari 2001
  • Niet online
Bedankt voor de suggesties.

Deze code toont de bitmap in de browser:
code:
1
2
3
4
5
6
7
Using bitMap As Bitmap = qrCode.GetGraphic(20)
   Using ms As New MemoryStream()
      bitMap.Save(ms, System.Drawing.Imaging.ImageFormat.Png)
      Dim byteImage As Byte() = ms.ToArray()
      imgBarCode.ImageUrl = "<img src=""data:image/png;base64," + Convert.ToBase64String(byteImage) + """></img>"
   End Using
End Using


Nu nog een manier vinden om de afbeelding ook effectief op te kunnen slaan.

Dan beginnen aan stap 2, een bitmap van een QR code omzetten naar een string met de gedecodeerde inhoud van de QR code.

Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 12-07 22:24
Niet om het één of het ander, maar waarom gebruik je classes uit de System.Drawing namespace wanneer duidelijk vermeld is in de API reference op MSDN dat deze niet ondersteund zijn binnen Windows of ASP.NET services?

Daar kleven namelijk wat problemen aan...

Acties:
  • 0 Henk 'm!

  • Brynnie
  • Registratie: Februari 2001
  • Niet online
Dat is waarom ik er de .dispose() regel aan toegevoegd heb. En eerlijk gezegd reikt mijn kennis niet ver genoeg om er een directe pasklare oplossing voor te vinden. Ik zal je link wel heel aandachtig doornmen. Bedankt voor de info!

Acties:
  • 0 Henk 'm!

  • jan-marten
  • Registratie: September 2000
  • Laatst online: 12-07 11:44
In plaats van opslaan is het verstandiger in stap 1 (waar je nu nog data:image/png;base64 doet) te refereren naar een andere ASPX-pagina. Die andere ASPX-pagina (ik noem 'm even QR.ASPX) generereert dan de werkelijke image en spuugt dit in het juiste PNG formaat (incl de juiste headers) naar de client.

Het is aan jouw hoe je de parameters heen en weer krijgt (via url of session informatie).

Opslaan op schijf zou ik in deze gevallen niet aan beginnen. Levert alleen maar mogelijke cache problemen op.

Acties:
  • 0 Henk 'm!

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 11-07 17:08

mulder

ik spuug op het trottoir

oogjes open, snaveltjes dicht


Acties:
  • 0 Henk 'm!

  • Brynnie
  • Registratie: Februari 2001
  • Niet online
Bedankt voor de link. Interessante aanpak, alhoewel bij de comments ook gezegd wordt dat afbeeldingen opslaan in een hash table in de sessie, de schaalbaarheid en werking van de site ernstig kan hinderen...

Iets om verder uit te pluizen dus.

Maar een imagehandler maken om zo veel schijfgebruik te vermijden (en de afbeeldingen te beschermen) is wel een goed idee.
Pagina: 1