Bilddatei in Array speichern????
Bilddatei in Array speichern????
Hallihallo,
ich würde gerne mit PureBasic etwas in Richtung OCR machen und hab' mir da schon in der Theorie einige Dinge überlegt, wie man das von der mathematischen Seite her lösen könnte.
Mein größtes Problem ist aber Folgendes: Wie kann ich mit relativ einfachen Mitteln ein gescanntes Bild von einem Schriftstück in ein Array übernehmen??? Die Dateien liegen entweder als JPG, BMP, GIF oder PNG vor. Ich glaube PB kann von Haus aus kein GIF importieren, aber das würde nix ausmachen, da ich es mit 'nem Bildbearbeitungsprogramm in andere Formate umwandeln kann.
Ich möchte das Bild nicht anzeigen, sondern die einzelnen Pixel im Bild abtasten und dann weiterverarbeiten.
Ach ja: Das von mir angedachte Programm braucht keine Scannerschnittstelle haben! Die Texte scanne ich separat ein.
Gruß, Jan
PS:
1.) Ich beginne gerade erst, mit PB - also nicht zu viele Vorkenntnisse voraussetzen. Hab' aber früher mal AmigaBasic programmiert und bin mit den allgemeinen Grundlagen vertraut.
2.) Falls das eine Rolle spielt: Ich habe Windows2000 SP4 und die neueste PB-Version 4.10 Beta 2.
ich würde gerne mit PureBasic etwas in Richtung OCR machen und hab' mir da schon in der Theorie einige Dinge überlegt, wie man das von der mathematischen Seite her lösen könnte.
Mein größtes Problem ist aber Folgendes: Wie kann ich mit relativ einfachen Mitteln ein gescanntes Bild von einem Schriftstück in ein Array übernehmen??? Die Dateien liegen entweder als JPG, BMP, GIF oder PNG vor. Ich glaube PB kann von Haus aus kein GIF importieren, aber das würde nix ausmachen, da ich es mit 'nem Bildbearbeitungsprogramm in andere Formate umwandeln kann.
Ich möchte das Bild nicht anzeigen, sondern die einzelnen Pixel im Bild abtasten und dann weiterverarbeiten.
Ach ja: Das von mir angedachte Programm braucht keine Scannerschnittstelle haben! Die Texte scanne ich separat ein.
Gruß, Jan
PS:
1.) Ich beginne gerade erst, mit PB - also nicht zu viele Vorkenntnisse voraussetzen. Hab' aber früher mal AmigaBasic programmiert und bin mit den allgemeinen Grundlagen vertraut.
2.) Falls das eine Rolle spielt: Ich habe Windows2000 SP4 und die neueste PB-Version 4.10 Beta 2.
Du kannst ein 2 Dimensionales Array machen
(die Breite und Höhe des Bildes kannst du mit ImageWidth und ImageHeight harausfinden)
Mit
kannst du dann die RGB Farbe speichern...
Code: Alles auswählen
Dim MeinArray(x, y)
in x speicherst du die x- Koordinate , in y die y Koordinate...
Mit
Code: Alles auswählen
Point(x,y)
Zuletzt geändert von pede am 02.08.2007 20:38, insgesamt 1-mal geändert.
"oh... ein Sarkasmus-Detektor... ein wirklich nützliches Gerät" .. dit.. dit.. ditditdit.. *bumm*
- Olaf
- Beiträge: 117
- Registriert: 20.04.2006 14:51
- Wohnort: 66606 St.Wendel (Niederlinxweiler, Dr.Albert-Schweitzer-Str.9)
- Kontaktdaten:
Einfach alle Bildpunkte in ein 2-dimensionales Array speichern:
Code: Alles auswählen
UsePNGImageDecoder()
Image$="xyz.png"
LoadImage(0,Image$)
w=ImageWidth(0)
h=ImageHeight(0)
Dim Punkte.l(w,h)
StartDrawing(ImageOutput(0))
For y=0 to h
For x=0 to w
Punkte(x,y)=Point(x,y)
Next x
Next y
StopDrawing()
PB 4.xx (Windows & Linux & Mac OS X)
Treffen sich 2 Kurven in der Unendlichkeit. Sagt die eine zur anderen: "Hau ab aus meinem Definitionsbereich oder ich leite dich ab!"
Darauf die andere: "Mach nur! Ich bin die e-Funktion."
Treffen sich 2 Kurven in der Unendlichkeit. Sagt die eine zur anderen: "Hau ab aus meinem Definitionsbereich oder ich leite dich ab!"
Darauf die andere: "Mach nur! Ich bin die e-Funktion."

-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
@JayCool
willkommen im Board
man kann auch direkt auf den Image-speicher zugreifen, z.b. mit BitBlt,
oder mit pointern, der eigentliche speicher der matrix ist im objektheader hinterlegt.
ein vorheriges auslesen in ein array (und dann auch noch per DirectDraw) ist eher kontraduktiv.
...kommt natürlich auch drauf an, was du eigentlich machen willst.
willkommen im Board
man kann auch direkt auf den Image-speicher zugreifen, z.b. mit BitBlt,
oder mit pointern, der eigentliche speicher der matrix ist im objektheader hinterlegt.
ein vorheriges auslesen in ein array (und dann auch noch per DirectDraw) ist eher kontraduktiv.
...kommt natürlich auch drauf an, was du eigentlich machen willst.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
> Auch ist es nicht so trivial ein jpg auszulesen
steht denn ein JPG codiert im speicher?
ich war der ausfassung, dass es beim einladen decodiert wird,
und dann als raw-matrix im speicher steht.
das wäre dann doch wie ein array, auf das man mit pointern zugreifen kann,
wenn man die startadresse der matrix herausfindet.
steht denn ein JPG codiert im speicher?
ich war der ausfassung, dass es beim einladen decodiert wird,
und dann als raw-matrix im speicher steht.
das wäre dann doch wie ein array, auf das man mit pointern zugreifen kann,
wenn man die startadresse der matrix herausfindet.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Hi @ all!
Erstmal vielen Dank an alle!
Ich hab' da mal noch eine Frage:
Wie ist das Bild bei der Lösung von Olaf dann hinsichtlich der Farben abgelegt? Geh ich recht in der Annahme, dass in Punkte.l(x,y) die Bits 0 bis 7 den Rot-Anteil, Bits 8 bis 15 den Grün-Anteil und Bits 16 bis 23 den Blau-Anteil des Bildpunktes enthalten?
Und was bedeuten dann die Bits 24 bis 31???
Erstmal vielen Dank an alle!
Ich hab' da mal noch eine Frage:
Wie ist das Bild bei der Lösung von Olaf dann hinsichtlich der Farben abgelegt? Geh ich recht in der Annahme, dass in Punkte.l(x,y) die Bits 0 bis 7 den Rot-Anteil, Bits 8 bis 15 den Grün-Anteil und Bits 16 bis 23 den Blau-Anteil des Bildpunktes enthalten?
Und was bedeuten dann die Bits 24 bis 31???
Olaf hat geschrieben:Einfach alle Bildpunkte in ein 2-dimensionales Array speichern:Code: Alles auswählen
UsePNGImageDecoder() Image$="xyz.png" LoadImage(0,Image$) w=ImageWidth(0) h=ImageHeight(0) Dim Punkte.l(w,h) StartDrawing(ImageOutput(0)) For y=0 to h For x=0 to w Punkte(x,y)=Point(x,y) Next x Next y StopDrawing()
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
die beinhalten den Alpha-Kanal, also eine dynamische transparenz.
das wird allerdings nur eingeschränkt benutzt.
(von spielen im 32bit mode; bei XP teilweise bei icons, bei win2k garnicht)
könnte aber auch sein, dass die Farbtiefe deines geladenen Images von der Farbtiefe des Desktops abhängt.
bei 16bit farben hast du normalerweise ne 5/6/5 verteilung.
das wird allerdings nur eingeschränkt benutzt.
(von spielen im 32bit mode; bei XP teilweise bei icons, bei win2k garnicht)
könnte aber auch sein, dass die Farbtiefe deines geladenen Images von der Farbtiefe des Desktops abhängt.
bei 16bit farben hast du normalerweise ne 5/6/5 verteilung.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.