Tapeman Geschrieben 11. Oktober 2004 Teilen Geschrieben 11. Oktober 2004 Hallo, wie ist es mir möglich unter Visual Basic 6 bzw. .NET ein Bild zu malen und dieses dann in einer abzuspeichern? Gruß Tapeman Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gast Geschrieben 11. Oktober 2004 Teilen Geschrieben 11. Oktober 2004 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Tapeman Geschrieben 11. Oktober 2004 Autor Teilen Geschrieben 11. Oktober 2004 Das ist aber für VB6? Wo bzw. wird der Farbwert festgelegt? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gast Geschrieben 11. Oktober 2004 Teilen Geschrieben 11. Oktober 2004 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Tapeman Geschrieben 11. Oktober 2004 Autor Teilen Geschrieben 11. Oktober 2004 Achja, regelt die Picture die Bildgröße (Pixel mal Pixel) selber, oder geht das irgendwo einzustellen? Da ich auf Arbeit kein VB6 sondern nur VB.NET habe werde ich es heute nach Arbeitsschluß ausprobieren. Danke. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gast Geschrieben 11. Oktober 2004 Teilen Geschrieben 11. Oktober 2004 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Tapeman Geschrieben 12. Oktober 2004 Autor Teilen Geschrieben 12. Oktober 2004 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gast Geschrieben 15. Oktober 2004 Teilen Geschrieben 15. Oktober 2004 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ß. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Tapeman Geschrieben 18. Oktober 2004 Autor Teilen Geschrieben 18. Oktober 2004 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gast Geschrieben 18. Oktober 2004 Teilen Geschrieben 18. Oktober 2004 Poste mal Deinen Quellcode wenn Du kannst, dann kann man am besten die möglichen Engstellen sehen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Tapeman Geschrieben 19. Oktober 2004 Autor Teilen Geschrieben 19. Oktober 2004 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gast Geschrieben 20. Oktober 2004 Teilen Geschrieben 20. Oktober 2004 [...] 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Tapeman Geschrieben 20. Oktober 2004 Autor Teilen Geschrieben 20. Oktober 2004 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.