wie Bitmap in WPF Image anzeigen
- WPF
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von -Franky-.
-
-
If _work = worktype.hard Then Me.Drink(Coffee)
Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.
## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##
-
@NoFear23
OK. Hab auch schonmal kurz in dein Tuto reingeschaut.
Ich habe bisher nur mit WinForms gearbeitet. Da es aber in letzter Zeit immer wieder Probleme mit immer weiter verbreiteten
hochauflösenden Monitoren und Darstellungsproblemen gibt möchte ich mich mal mit WPF beschäftigen und versuche
vorhandene Anwendungen auf dieses Framework zu transformieren.
Du siehst ja sicher schon an der Frage , dass das ein Anfängerproblem ist.
Bilder aus einer externen Quelle einzubinden ist mir auch schon gelungen. Ich möchte den erzeugten QR-Code aber nicht erst speichern
sondern direkt zur anzeige bringen. Wie sieht den da die Uri aus ?
MfG -
doLob schrieb:
Wie sieht den da die Uri aus ?
Genau so wie ich es dir gepostet habe. Deshalb auch das http im String.
Einfacher ist es wenn man wie es sich in der Welt der WPF gehört mit Binding arbeitet, da kannste dann direkt auf die URL als String binden.
Grüße
SaschaIf _work = worktype.hard Then Me.Drink(Coffee)
Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.
## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##
-
-
If _work = worktype.hard Then Me.Drink(Coffee)
Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.
## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##
-
Ja, das funzt bei mir auch wunderbar.
Der QR-Code wird als bitmap grafik erzeugt und befindet sich in einer Variablen die keine Endung hat oder as String vorliegt.
In vb.net hatte ich diese einfach an eine PictureBox übergeben.
Gruß -
doLob schrieb:
Der QR-Code wird als bitmap grafik erzeugt
Ahaaaa, da siehste mal wie wichtig es im Forum ist immer genug Information zu geben.
Laut deinem ersten Post kommt man auf keinen anderen Gedanken als das du ein Bild aus einer URI laden willst.
OK, dann hätte ich da folgende Methode:
VB.NET-Quellcode
-
- Private Function BitmapToImageSource(ByVal bitmap As Bitmap) As BitmapImage
- Using memory As MemoryStream = New MemoryStream()
- bitmap.Save(memory, System.Drawing.Imaging.ImageFormat.Bmp)
- memory.Position = 0
- Dim bitmapimage As BitmapImage = New BitmapImage()
- bitmapimage.BeginInit()
- bitmapimage.StreamSource = memory
- bitmapimage.CacheOption = BitmapCacheOption.OnLoad
- bitmapimage.EndInit()
- Return bitmapimage
- End Using
- End Function
GrüßeIf _work = worktype.hard Then Me.Drink(Coffee)
Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.
## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##
-
-
Gerne. Sei so gut und markiere den Thread oben als Erledigt, so wissen andere das es hier eine Lösung gibt/gab.
GrüßeIf _work = worktype.hard Then Me.Drink(Coffee)
Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.
## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##
-
@Nofear23m
Hey Sascha, ich hab deinen Code aus Post 8 grad mal in mein MVVM-Testprojekt integriert und es funktioniert so weit ganz gut.
Nur eins wundert mich ein bisschen:
Ich gebe das erzeugte Bild in einem Image aus. Wenn ich dem Image feste Werte fürWidth
undHeight
gebe dann ist alles gut. Nur wenn ich das per Binding erledige, dann entsteht um das Bild rum ein roter Rand mit sagen wir mal 1-2 Pixeln Thickness... Ich glaube nicht dass das mit deinem Code zusammenhängt, kann es aber nicht mit Sicherheit sagen...
Wenn ich meinen Code in einem WinForms-Programm kopiere und das dann direkt in einer PictureBox ausgebe, ist auch kein Problem...
Ist das ein bekanntes und/oder lösbares Problem? Hier mal mein ViewModel:
Spoiler anzeigen VB.NET-Quellcode
- Option Strict On
- Imports System.Drawing
- Imports System.IO
- Imports System.Windows.Input
- Imports System.Windows.Media
- Imports System.Windows.Media.Imaging
- Imports System.Windows.Threading
- Imports Un4seen
- Imports Un4seen.Bass
- Public Class MainViewModel
- Inherits ViewModel.Instrastructure.ViewModelBase
- Public Spektrum As New Un4seen.Bass.Misc.Visuals
- Public streamfx As Integer
- Public VisualizationTimer As New DispatcherTimer
- Public BMP As Bitmap
- Public Sub New()
- If IsInDesignMode = False Then
- cbxIndex = 0
- Aufloesung = 1
- Distanz = 0
- Debug.WriteLine("Gestartet")
- _Hoehe = 100
- _Breite = 350
- VisualizationTimer.Interval = TimeSpan.FromMilliseconds(25)
- AddHandler VisualizationTimer.Tick, AddressOf UpdateVisualization
- Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_CPSPEAKERS, IntPtr.Zero, Nothing)
- streamfx = Bass.BASS_StreamCreateFile("C:\Test.mp3", 0, 0, BASSFlag.BASS_STREAM_AUTOFREE Or BASSFlag.BASS_STREAM_PRESCAN)
- Bass.BASS_ChannelPlay(streamfx, False)
- VisualizationTimer.Start()
- End If
- End Sub
- Private _cbxIndex As Integer
- Public Property cbxIndex As Integer
- Get
- Return _cbxIndex
- End Get
- Set(value As Integer)
- _cbxIndex = value
- RaisePropertyChanged()
- End Set
- End Property
- Private Sub UpdateVisualization(ByVal sender As Object, ByVal e As EventArgs)
- Select Case cbxIndex
- Case 0
- BMP = Spektrum.CreateSpectrumLine(streamfx, Breite, Hoehe, System.Drawing.Color.Green, System.Drawing.Color.IndianRed, System.Drawing.Color.Black, 40, 5, False, True, True)
- Case 1
- BMP = Spektrum.CreateSpectrumBean(streamfx, Breite, Hoehe, System.Drawing.Color.Green, System.Drawing.Color.IndianRed, System.Drawing.Color.Black, 40, False, True, True)
- Case 2
- BMP = Spektrum.CreateSpectrumDot(streamfx, Breite, Hoehe, System.Drawing.Color.Green, System.Drawing.Color.IndianRed, System.Drawing.Color.Black, 40, 5, False, True, True)
- Case 3
- BMP = Spektrum.CreateSpectrumEllipse(streamfx, Breite, Hoehe, System.Drawing.Color.Green, System.Drawing.Color.IndianRed, System.Drawing.Color.Black, 40, 5, False, True, True)
- Case 4
- BMP = Spektrum.CreateSpectrumLinePeak(streamfx, Breite, Hoehe, System.Drawing.Color.Green, System.Drawing.Color.IndianRed, System.Drawing.Color.SlateGray, System.Drawing.Color.Black, Aufloesung, 3, Distanz, 40, False, True, True) 'DAS HIER IST PERFEKT!!
- Case 5
- BMP = Spektrum.CreateSpectrum(streamfx, Breite, Hoehe, System.Drawing.Color.Green, System.Drawing.Color.IndianRed, System.Drawing.Color.Black, False, True, True)
- Case 6
- BMP = Spektrum.CreateSpectrumText(streamfx, Breite, Hoehe, System.Drawing.Color.Green, System.Drawing.Color.IndianRed, System.Drawing.Color.Black, "Hallo Welt", False, True, True)
- Case 7
- BMP = Spektrum.CreateSpectrumWave(streamfx, Breite, Hoehe, System.Drawing.Color.Green, System.Drawing.Color.IndianRed, System.Drawing.Color.Black, Aufloesung, False, True, True)
- Case 8
- BMP = Spektrum.CreateWaveForm(streamfx, Breite, Hoehe, System.Drawing.Color.Green, System.Drawing.Color.IndianRed, System.Drawing.Color.Purple, System.Drawing.Color.Black, Aufloesung, True, False, True)
- End Select
- Bild = BitmapToImageSource(BMP)
- End Sub
- Private _StoppeVisualisierung As ICommand
- Public ReadOnly Property StoppeVisualisierung() As ICommand
- Get
- If _StoppeVisualisierung Is Nothing Then _StoppeVisualisierung = New Instrastructure.RelayCommand(AddressOf StoppeVisualisierung_Execute, Function(o) True)
- Return _StoppeVisualisierung
- End Get
- End Property
- Private Sub StoppeVisualisierung_Execute(obj As Object)
- VisualizationTimer.Stop()
- End Sub
- Private Function BitmapToImageSource(ByVal bitmap As Bitmap) As BitmapImage
- Using memory As MemoryStream = New MemoryStream()
- bitmap.Save(memory, System.Drawing.Imaging.ImageFormat.Bmp)
- memory.Position = 0
- Dim bitmapimage As BitmapImage = New BitmapImage()
- bitmapimage.BeginInit()
- bitmapimage.StreamSource = memory
- bitmapimage.CacheOption = BitmapCacheOption.OnLoad
- bitmapimage.EndInit()
- Return bitmapimage
- End Using
- End Function
- Private _Bild As ImageSource
- Public Property Bild As ImageSource
- Get
- Return _Bild
- End Get
- Set(value As ImageSource)
- _Bild = value
- RaisePropertyChanged()
- End Set
- End Property
- Private _Breite As Integer
- Public Property Breite As Integer
- Get
- Return _Breite
- End Get
- Set(value As Integer)
- _Breite = value
- RaisePropertyChanged()
- End Set
- End Property
- Private _Hoehe As Integer
- Public Property Hoehe As Integer
- Get
- Return _Hoehe
- End Get
- Set(value As Integer)
- _Hoehe = value
- RaisePropertyChanged()
- End Set
- End Property
- Private _Aufloesung As Integer
- Public Property Aufloesung As Integer
- Get
- Return _Aufloesung
- End Get
- Set(value As Integer)
- _Aufloesung = value
- RaisePropertyChanged()
- End Set
- End Property
- Private _Distanz As Integer
- Public Property Distanz As Integer
- Get
- Return _Distanz
- End Get
- Set(value As Integer)
- _Distanz = value
- RaisePropertyChanged()
- End Set
- End Property
- End Class
Und der XAML:
Die Application.xaml ist leer, es gibt nur diesen einen XAML und dieses ViewModel.
Leider ist das Projekt wieder abhängig von der bass(net).dll..., die in dieser aktuellen Version leider auch nicht als NuGet erhältlich ist...
Wäre cool wenn du was dazu sagen könntest... -
Hallo
kafffee schrieb:
dann entsteht um das Bild rum ein roter Rand
Dann wirst du irgendwo einen Border oder ähnliches definiert haben.
Wie schon in anderen Threads angesprochen bei solchen Fehlern immer erstmal in einem "frischen" Projekt probieren und sehen was hier passiert. Ja, das ist das Leben eines Entwicklers. Auch wenns weh tut
Nur mit dem bischen XAML kann ich leider nicht sagen was hier die Ursache ist.
Da musste etwas mehr zeigen.
Das mit der bass.dll ist blöd und erschwert das "helfen" am "echten" Projekt natürlich. Es gebe nur eine Restmöglichkeit. Wir schaun uns das per Discord an und schreiben hier dann die Lösung nieder (so das es nachvollzogen werden kann).
Grüße
SaschaIf _work = worktype.hard Then Me.Drink(Coffee)
Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.
## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##
-
@Nofear23m
Hey Sascha, freut mich mal wieder was von dir zu hören
Hab mal ein kleines Testprogramm erstellt um der Sache mal näher zu kommen. Das Ganze lässt sich wie ich herausgefunden hab auch ohne bass.dll reproduzieren.
In Zeile 18 im MainViewModel musst du halt noch den Pfad einer Bilddatei angeben.
Problem ist wie gesagt der rote Rand, der aber nur auftritt, wenn ichWidth
undHeight
desImage
jeweils auf eine Klasseneigenschaft binde...
Auf Discord chatten können wir trotzdem noch, sag mir wann und ich schau dass ich mir da Zeit nehmen kann und mich gut vorbereite... -
-
-
-
Aahhh jetzt ja. Hab mir sowas in der Art schon gedacht.... Kam auf die Idee, als ich mal an die Text-Property einer Textbox eine Integer Eigenschaft gebunden hab und dann auch ein roter Rand erschien, wenn keine Ganzzahl eingegeben wurde. Hatte den Gedanken dann wieder verworfen weil ich mir dachte, dass ein Pixel ein Pixel ist und nur somit nur eine Ganzzahl sein kann... Jetzt seh ich grad, dass das nicht in Pixel definiert wird sondern in geräteunabhängigen Einheiten.... Danke dir
-
Genau, wie Akanel schon schrieb ist immer auf den Datentyp zu achten, ansonsten müsste man eben einen Converter zwischenschalten.
Gut das du das Thema erledigen konntest.
Grüße
SaschaIf _work = worktype.hard Then Me.Drink(Coffee)
Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.
## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##
-
Jetzt muss ich unerwarteterweise doch noch mal nachhaken:
Problem ist, dass die Funktion, die mein Bild "erstellt", jeweils einen Integer für Breite und Höhe will, also habs ichs versucht einfach zu konvertieren:
Convert.ToInt32()
--> System.OverflowException: Der Wert für einen Int32 war zu groß oder zu klein.
CInt()
--> System.OverflowException: Die arithmetische Operation hat einen Überlauf verursacht.
DirectCast()
--> Der Wert vom Typ Double kann nicht in Integer konvertiert werden
CType()
--> System.OverflowException: Die arithmetische Operation hat einen Überlauf verursacht.
Auch vorher auf Ganzzahl auf bzw. abrunden hab ich versucht, ebenfalls ohne Erfolg.
Also hab ich einen Haltepunkt gesetzt, und bin mit der Maus mal überBreite
/Hoehe
gefahren. Der Wert von beiden istNaN
, was laut Google "Not a Number" heisst. Aber wies not a number, ich habe die Properties doch als Double deklariert??? -
-
Benutzer online 1
1 Besucher
-
Tags
-
Ähnliche Themen