Zum Inhalt springen

Bild malen und speichern VB 6 bzw. .NET


Tapeman

Empfohlene Beiträge

Ungefähr so:


Option Explicit

Public boolZeichne As Boolean

'Objekte:   Picture1 as PictureBox

'           Menu 'mmPaint' mit zwei Items 'mmPaintBeenden' und 'mmPaintSpeichern'


Private Sub Form_Load()

'Anmerkung: AutoRedraw der PictureBox auf 'True' setzen

    boolZeichne = False

End Sub


Private Sub mmPaintBeenden_Click()

    If MsgBox("Wollen Sie Paint wirklich beenden?", vbYesNo, "Warnung") = vbYes Then

        Unload Me

        End

    End If

End Sub


Private Sub mmPaintSpeichern_Click()

    'Picture1.Picture = Picture1.Image

    SavePicture Picture1.Image, "c:\test.bmp"

End Sub


Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

    boolZeichne = True

End Sub


Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

    If boolZeichne Then Picture1.PSet (X, Y)

End Sub


Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)

    boolZeichne = False

End Sub

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja, es ist für VB6.


Option Explicit

Public boolZeichne As Boolean

Public lngFarbe As Long

'Objekte:   Picture1 as PictureBox

'           CommonDialog CommonDialog1

'           Menu 'mmPaint'

'           MenuItem 'mmPaintFarbeSetzen'

'           MenuItem 'mmPaintBeenden'

'           MenuItem 'mmPaintSpeichern'


Private Sub Form_Load()

'Anmerkung: AutoRedraw der PictureBox auf 'True' setzen

    boolZeichne = False

    lngFarbe = 0

End Sub


Private Sub mmPaintBeenden_Click()

    If MsgBox("Wollen Sie Paint wirklich beenden?", vbYesNo, "Warnung") = vbYes Then

        Unload Me

        End

    End If

End Sub


Private Sub mmPaintFarbeSetzen_Click()

    CommonDialog1.ShowColor

    lngFarbe = CommonDialog1.Color

End Sub


Private Sub mmPaintSpeichern_Click()

    'Picture1.Picture = Picture1.Image

    SavePicture Picture1.Image, "c:\test.bmp"

End Sub


Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

    boolZeichne = True

End Sub


Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

    If boolZeichne Then Picture1.PSet (X, Y), lngFarbe

End Sub


Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)

    boolZeichne = False

End Sub

Link zu diesem Kommentar
Auf anderen Seiten teilen

Müsstest Du schon selber machen:


'ScaleMode des Picture1 auf 3 - Pixel stellen

'intHeight und intWidth sind Variablen, die man selber setzen soll

Picture1.Height = intHeight

Picture1.Width = intWidth

Link zu diesem Kommentar
Auf anderen Seiten teilen

Habe es ausprobiert:

zur Größe: ScaleHeight muß < sein als Height und ScaleWidth muß < kleiner sein als Width

Ich kann zwar toll Bilder malen, aber der Zugriff dauert ewig lange, kann man das nicht beschleunigen?

Wenn ich ScaleHeight/Width auf über 4095 stelle kommt mir zu Schluß der tolle Fehler, kann AutoRedraw nicht erzeugen. Wahrscheinlich ist das Bild dann mit 4096*4096*3 Byte (48MB) zu groß.

Mir ist es doch lieber manuell einer BMP-Datei zu erzeugen, geht schneller, und kann auch bestimmt größer sein.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Habe es ausprobiert:

zur Größe: ScaleHeight muß < sein als Height und ScaleWidth muß < kleiner sein als Width

Ich kann zwar toll Bilder malen, aber der Zugriff dauert ewig lange, kann man das nicht beschleunigen?

Zugriff auf was? Bei mir geht das Erstellen, Speichern und Ansehen problemlos. VB6 + 1GB RAM

Wenn ich ScaleHeight/Width auf über 4095 stelle kommt mir zu Schluß der tolle Fehler, kann AutoRedraw nicht erzeugen. Wahrscheinlich ist das Bild dann mit 4096*4096*3 Byte (48MB) zu groß.

Mir ist es doch lieber manuell einer BMP-Datei zu erzeugen, geht schneller, und kann auch bestimmt größer sein.

Das Problem mit ScaleHeight/Width kann ich bei mir nicht reproduzieren. Habe beide Werte auf 5000 gestellt, konnte das Bild ohne Probleme malen/speichern/ansehen. Meine Bilder in der Auflösung 15.000 x 15.000 Twips waren unter 3 MB groß.

Link zu diesem Kommentar
Auf anderen Seiten teilen

VB6+512 MB RAM.

Aus Gründen der Zeit und der Graphik schreibe ich die Daten in ein Feld, geht relativ schnell.

Danach werden die Daten mit Picture1.PSet(x,y),c in die PictureBox reingeschrieben; das dauert lange (2 bis 4 fache als das Feld ins Feld schreiben).

Speichern, nagut 48 MB. Kein Problem.

Wenn ich die Größen über das Eigenschaftenfenster setze, nervt mich VB6 mit diesem Verhältnis. (ScaleHeight < Height, ...)

Ein Twip ist kleiner als ein Pixel.

VB6 rechnet dan glaube mehrere Twips zu einem Pixel um.

Link zu diesem Kommentar
Auf anderen Seiten teilen

So ungefähr:


DIM f(-2048 to 2047, -2048 to 2047) as LONG

DIM a as long, b as long, a1 as long, b1 as long

Berechnen der Farbwerte:

for a=...

 for b=...

      f(a1,b1)=....

 next b

next a

Malen:

for a=-2048 to 2047

 for b=-2048 to 2047

      Picture1.Pset (a,,f(a,

 next b

 if a mod 64=0 then debug.print a

next a

[/code]

Für a=-2048 to 2047 werden rund 2 Minuten gebraucht.

Zu Height, Width ...

Im Programm kann ich Height und ScaleHeigt, ... voneinander unabhängig definieren, aber die Bilddatei hat die Größe Width x Height und nicht ScaleWidth x ScaleHeight, und wenn Width bzw. Height zu groß werden, dann Probleme mit Autoredraw.

Link zu diesem Kommentar
Auf anderen Seiten teilen

[...]

Für a=-2048 to 2047 werden rund 2 Minuten gebraucht.

[...]

Klar, Du befüllst ja auch zuerst Arrays um sie dann in das Bild "hinein" zu malen. Bei der anderen Lösung werden die Pixel direkt in das Bild gemalt.

[...]

Im Programm kann ich Height und ScaleHeigt, ... voneinander unabhängig definieren, aber die Bilddatei hat die Größe Width x Height und nicht ScaleWidth x ScaleHeight, und wenn Width bzw. Height zu groß werden, dann Probleme mit Autoredraw.

[...]

Die Größe des Bildes wird mit Height und Width definiert. ScaleHeight / ScaleWidth ist die "innere" Auflösung des Bildes. Vergleich Drucker - "Height & Width" = DINA4, "ScaleHeight & ScaleWidth" = 300/600/... dpi.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Es geht um den Schreibvorgang selber.

Wenn ich berechne und sofort reinschreibe dauert das noch länger (ich schätze ca. 3,5 min.)

Berechnen: 1,75 Minuten.

Schreiben: 2,5 Minuten.

Wenn aber Height und Width kleiner sind als ScaleHeight und ScaleWidth, dann leider aber die Qualität auch (, extrem).

Aber trotzdem ich will 100%ige Qualität in der Datei.

Wenn die Datei 200 MB oder mehr größer wird ist das egal.

Aber es kommt ja ein AutoRedraw-Fehler.

Eine kleine Relationstabelle:

x 4096 16384

y 4096 16384

-------------------------------

t(berechnen) 1,75 rund 28 Minuten

t(malen) 2,5 rund 40 Minten

-------------------------------------------

Dateigröße 48 MB 768 MB

Wenn ich das berechnete Feld gleich schreibe, dann brauche ich rund 2 Minuten.

Wenn ich in einem Zug berechnen, male und schreibe brauche ich bestimmt 3,5 Minuten.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...