Graphics in dataset schreiben und im dgv anzeigen

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von PadreSperanza.

    Graphics in dataset schreiben und im dgv anzeigen

    Guten Abend,
    ich würde gerne eine im Code erstellte Grafik/Zeichnung in einem dataset speichern, damit die dann im dgv angezeigt wird.

    Im dataset habe ich das als Byte() eingestellt.
    Ein Bmp bekomme ich auch (mit Hilfe von G..) umgewandelt und es wird angezeigt.

    Nun möchte ich aber eine Grafik, die ich selber im Code zeichne, dort anzeigen.
    Ich kann mir nur schwer vorstellen, dass ich den Weg gehen muss und das erst als BMP erstellen muss um es dann wieder zu konvertieren.

    Ich zeichne in Graphics.

    Kiter20
    "Mann" lernt mit seinen Projekten.

    kiter20 schrieb:

    (mit Hilfe von G..)
    Wer oder was ist G?

    kiter20 schrieb:

    eine Grafik, die ich selber im Code zeichne
    Mein Code besteht komischerweise nur aus Text. Grafiken kann ich da nicht reinmalen. Oder meinst Du, dass Du eine Grafik durch Codeanweisungen zeichnest?

    kiter20 schrieb:

    Ich zeichne in Graphics.
    Versteh ich auch leider nicht.
    --> Gib mal bitte ein Beispiel plus Screenshot, vielleicht komm ich dann hinterher. Oder vielleicht kommen die anderen mit den Beschreibungen klar. :|

    Aber was ich rauslese, würde dazu führen, was Du schon weißt: Bild malen, über ne Bitmap als ByteArray speichern und rein ins tDS.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @kiter20 Du kannst per Code via Graphics eine Image-Instanz mit Deinem Bildinhalt erzeugen und damit tun, was zu tun ist.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @VaporiZed: Dann versuche ich mich mal anders auszudrücken.
    Ein Bmp bekomme ich auch (mit Hilfe von G..) umgewandelt und es wird angezeigt.
    >> Ich habe mit Hilfe von Google und Copy&Paste es hinbekommen ein bmp zu laden und in ein Byte() umzuwandeln.
    Dies habe ich dann in dem Dataset gespeichert. Erfolgreich wird mir dann das Bild in meinem dgv angezeigt.

    Natürlich besteht mein Code auch nur aus Text! Ich wollte damit sagen, dass ich als Basis kein bmp jpg oder so verwende, welches ich einfach laden kann. Ich habe selber einen Code geschrieben, der mir eine CAD Zeichnung im dxf Format einließt und dann per paint event auf ein panel zeichnet.

    "Ich zeichne in Graphics" bedeutet > Dim g As Graphics = e.Graphics

    Ich hoffe das dadurch das etwas klarer wird.



    RodFromGermany schrieb:

    Du kannst per Code via Graphics eine Image-Instanz mit Deinem Bildinhalt erzeugen und damit tun, was zu tun ist.


    Genau das ist ja mein Problem.
    Könntest du mir ein Beispiel für die Image Instanz geben. Ich vermute (hoffe) das ich nicht ganz auf dem Holzweg bin.
    Aber irgendwie bewege ich mich mit meinem Code im Kreis und bekomme keinen vernünftigen Ansatz.
    Und vor allem dann als nächstes: Wie bekomme ich dann dies Image in ein Byte Array?

    "Mann" lernt mit seinen Projekten.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „kiter20“ ()

    VB.NET-Quellcode

    1. Private Function _Bild() As Byte()
    2. Dim _Image As New Bitmap(100, 100)
    3. Dim g As Graphics = Graphics.FromImage(_Image)
    4. With g
    5. .ResetTransform()
    6. .PageUnit = GraphicsUnit.Pixel
    7. .Clear(Color.White)
    8. End With
    9. Dim P As New Pen(Color.Black, 0.1)
    10. Dim P1 As New Point(0, 0)
    11. Dim P2 As New Point(100, 100)
    12. g.DrawLine(P, P1, P2)
    13. Dim ms = New MemoryStream()
    14. _Image.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp) ' Use appropriate format here
    15. Dim bytes = ms.ToArray()
    16. Return bytes
    17. End Function



    So in etwa?
    "Mann" lernt mit seinen Projekten.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „kiter20“ ()

    kiter20 schrieb:

    Wie bekomme ich dann dies Image in ein Byte Array?
    (Faszinierend, wie einfach eine klare Fragestellung sein kann, oder? ;) )


    Eine Möglichkeit wäre TypConverter - Databinding arbeitet intern damit.
    Geht so:

    VB.NET-Quellcode

    1. Imports System.ComponentModel
    2. Public Function Anything2Array(itm As Object) As Byte()
    3. Dim tpSrc = itm.GetType(), tpDest = GetType(Byte())
    4. Dim conv = TypeDescriptor.GetConverter(tpSrc)
    5. If conv.CanConvertTo(tpDest) Then Return DirectCast(conv.ConvertTo(itm, tpDest), Byte())
    6. Return Nothing
    7. End Function
    Das konvertiert alles nach Byte() - sofern der vom TypeDescriptor gefundene TypeConverter das kann. Erfreulicherweise bei Bitmaps kanner.




    kiter20 schrieb:

    So in etwa?
    Sieht nicht schlecht aus.
    Obs funktioniert kannst du uns besser sagen als wir dir - odr?

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „ErfinderDesRades“ ()

    ok, dann noch Hinweis: Alle disposablen Objekte solltest du unbedingt auch disposen, wenn nicht mehr gebraucht.
    Königsweg hierfür ist der Using-Block.
    Welches die disposablen sind findest du mittm ObjectExplorer heraus.

    (Und die Methode _Bild() nenen - das ist das ich schon wieder die Lust verliere.)

    ErfinderDesRades schrieb:


    (Und die Methode _Bild() nenen - das ist das ich schon wieder die Lust verliere.)


    Was habe ich falsch gemacht? "_Bild" war jetzt nur um den Code zu testen.

    Nachher wird da draus: Private Function _dxf2byte(ByVal _dxf As String) As Byte()

    Ich hoffe das ist besser, sonst gib mir bitte einen Hinweis.
    "Mann" lernt mit seinen Projekten.

    ErfinderDesRades schrieb:

    Sorry - ist eiglich halb sso wild.


    Ich muss dennoch sagen, dass ich es gut finde, dass du wirklich auch bei anderen penetrant darauf achtest, dass sie einen gewissen Standard einhalten. Auch wenn es manchmal harsch erscheinen mag, ich ertappe mich immer mal wieder selbst dabei, dass ich einen (sogar selbst gewählten) Standard oftmals ignoriere (vor allem wenn es mal schnell gehen muss).
    Und jedes Mal, wenn ich solche Zeilen von dir lese, fühle ich mich immer auch etwas ertappt und denke dann wieder daran, dass ich da dringend dran denken muss - auch für mich.

    Also gerne weiter machen - das hilft ungemein, seinen Schweinehund anzutreiben, das auch konsequent umzusetzen :)