[ASP.NET] Transparant PNG/GIF

Pagina: 1
Acties:

  • renekosterman
  • Registratie: Februari 2003
  • Laatst online: 04-03-2019
Ik gebruik de onderstaande functie om een afbeelding die opgeslagen ligt in een byte array te resizen en te outputten op een pagina, dit werkt allemaal perfect, het enigste is dat deze de transparantie van een gif niet doorgeeft, waardoor de achtergrond van deze zwart word.

Ik heb al verschillende dingen geprobeerd, maar er schijnt niet echt een oplossing voor te zijn.

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
Public Function Get_Image(ByVal intMaxWidth As Short, _
                                    ByVal intMaxHeight As Short, _
                                    ByVal Image As Byte(), _
                                    ByVal Response As HttpResponse, _
                                    Optional ByVal Text As String = "")

            Dim x As Integer
            Dim ImageContent() As Byte = Image
            Dim strmImageStream As New IO.MemoryStream
            strmImageStream.Write(Image, 0, Image.Length)

            Dim bmpSource As System.Drawing.Bitmap = System.Drawing.Bitmap.FromStream(strmImageStream)
            Dim sizNewSize As New Size
            sizNewSize = NewthumbSize(bmpSource.Width, bmpSource.Height, intMaxWidth, intMaxHeight)
            Dim thisFormat = bmpSource.RawFormat
            Dim bmpOutput As Bitmap = New Bitmap(sizNewSize.Width, sizNewSize.Height)

            Dim g As Graphics = Graphics.FromImage(bmpOutput)

            g.Clear(Color.Transparent)
            g.DrawImage(bmpOutput, New Rectangle(0, 0, bmpOutput.Width, bmpOutput.Height))

            g.CompositingQuality = Drawing2D.CompositingQuality.HighQuality
            g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
            g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
            g.DrawImage(bmpSource, 0, 0, sizNewSize.Width, sizNewSize.Height)

            Dim encoderParams As System.Drawing.Imaging.EncoderParameters = New System.Drawing.Imaging.EncoderParameters
            Dim lngQuality As Long = 93 '0 = lowest, 100 = highest -- 95 seemed to be best ratio for file/quality'

            Dim encoderParam As Imaging.EncoderParameter = New Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, lngQuality)
            encoderParams.Param(0) = encoderParam

            Dim arrayICI As ImageCodecInfo() = ImageCodecInfo.GetImageEncoders()
            Dim jpegICI As ImageCodecInfo

            For x = 0 To arrayICI.Length - 1
                If (arrayICI(x).FormatDescription.Equals("PNG")) Then
                    jpegICI = arrayICI(x)
                    Exit For
                End If
            Next

            Dim Memstream As New MemoryStream
            If Text <> "" Then
                'voeg watermerk toe
                AddWaterMark(bmpOutput, Text, intMaxWidth)
            End If

            bmpOutput.Save(Memstream, ImageFormat.Png)
            Response.Clear()
            Response.ContentType = "image/png"
            Memstream.WriteTo(Response.OutputStream)
            Memstream.Flush()
            Memstream.Close()

            strmImageStream.Close()
            g.Dispose()
            bmpSource.Dispose()
            bmpOutput.Dispose()
        End Function

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 16:58

gorgi_19

Kruimeltjes zijn weer op :9

transparante images zijn rampzalig in .Net; Transparante PNG's ondersteunt IE niet en transparante gifs moet je je eigen colormap voor gaan maken

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • renekosterman
  • Registratie: Februari 2003
  • Laatst online: 04-03-2019
Dat heb ik inderdaad ook geprobeerd om een eigen collor palette te maken, maar dit had weinig success, ik bleef gewoon de achtergrond houden die zwart was.

Geprobeerd met de volgende code

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
        Public Function GetColorPalette(ByVal nColors As Integer)
            Dim bitscolordepth As PixelFormat = PixelFormat.Format1bppIndexed
            Dim palette As ColorPalette
            Dim bitmap As Bitmap

            If (nColors > 2) Then
                bitscolordepth = PixelFormat.Format4bppIndexed
            End If
            If (nColors > 16) Then
                bitscolordepth = PixelFormat.Format8bppIndexed
            End If

            bitmap = New Bitmap(1, 1, bitscolordepth)

            palette = bitmap.Palette

            Return palette

        End Function


Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
            Dim Pal As ColorPalette
            Dim fTransparent As Boolean
            Dim Intensity As Integer
            Dim Alpha As Integer
            Dim i As Integer

            Pal = GetColorPalette(256)

            For i = 0 To 255 - 1
                Alpha = 255
                Intensity = i * 255 / 254
                If i = 0 Then
                    Alpha = 0
                End If
                Pal.Entries(i) = Color.FromArgb(Alpha, Intensity, Intensity, Intensity)
            Next

            bmpOutput.Palette = Pal

[ Voor 81% gewijzigd door renekosterman op 20-10-2005 12:05 ]


  • dominic
  • Registratie: Juli 2000
  • Laatst online: 08-02 14:55

dominic

will code for food

gorgi_19 schreef op donderdag 20 oktober 2005 @ 12:01:
transparante images zijn rampzalig in .Net; Transparante PNG's ondersteunt IE niet en transparante gifs moet je je eigen colormap voor gaan maken
noot: Transparante PNG's worden gewoon ondersteund door IE |:( je moet ze via de AlphaImageLoader laden..

Download my music on SoundCloud


  • WormLord
  • Registratie: September 2003
  • Laatst online: 30-03 16:26

WormLord

Devver

dominic schreef op donderdag 20 oktober 2005 @ 12:04:
[...]


noot: Transparante PNG's worden gewoon ondersteund door IE |:( je moet ze via de AlphaImageLoader laden..
offtopic:
Dat betekend dus dat ze niet gewoon ondersteund worden.

  • renekosterman
  • Registratie: Februari 2003
  • Laatst online: 04-03-2019
Nog niemand veder die een oplossing weet voor dit probleem?

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 16:23

TeeDee

CQB 241

De achtergrond van een nieuwe image vanuit een .net app heeft default een zwarte canvas. Gooi hier eens met een Rectangle een witte laag overheen. Dan heb je dat in ieder geval al te pakken.

Vervolgens zou je met je ColorMap een transparantie kunnen geven.

Heart..pumps blood.Has nothing to do with emotion! Bored


  • renekosterman
  • Registratie: Februari 2003
  • Laatst online: 04-03-2019
@ Sybesma: Bedankt ik ga er even naar kijken :)
@ TeeDee: Ik heb al een witte achtergrond, en met de colormaps dat werkte niet echt.
Pagina: 1