Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Bitmap-Grafik

3 views
Skip to first unread message

Nicky Rother

unread,
Nov 30, 1997, 3:00:00 AM11/30/97
to

Servus!

Gibt es unter Euch (beneidenswerten) C-Profis jemanden,
der mir bei folgender Schwierigkeit helfen kann:

In Bitmap-Grafiken soll die Farbe einzelner Pixel geändert
werden, bzw. sollen Linien in eine vorhandene Bitmap-Grafik
"gezeichnet" werden. Zusätzliches Problem: Die Größe der
bmp-Dateien (ab 20MB aufwärts, unkomprimiert) erfordert es,
die Änderungen gleich direkt in der Datei (auf Platte)
vorzunehmen.

Leider sehe ich keinen Ansatzpunkt in diesem Fall.
"Grundkenntnisse" in C sind vorhanden, ein solch spezielles
Problem bedarf leider etwas Hilfe.

Wer hat einen Rat?


MfG
Nicky

Christophe Saout

unread,
Dec 2, 1997, 3:00:00 AM12/2/97
to

Hallo Nicky!

Frage vorneweg: Mußt du dich mit DOSen-64k-Grenzen rumplagen oder welchen
Compiler verwendest du?

Auf Wiedermailen, Christophe!
[Newton 0.27ß]

Dimitri Junker

unread,
Dec 3, 1997, 3:00:00 AM12/3/97
to

Hallo Nicky!

NR>Gibt es unter Euch (beneidenswerten) C-Profis
Darf ich trotzdem antworten?
NR>In Bitmap-Grafiken soll die Farbe einzelner Pixel geändert werden,
NR>bzw. sollen Linien in eine vorhandene Bitmap-Grafik "gezeichnet"
NR>werden...
BMP Dateien liegen meist ungepackt vor, ansonsten ist da eine Lauflängen-
kodierung drin. Ich würde es also bei Speichermangel so machen:
Einzelne Punkte: nach y sortieren, dann Zeile für Zeile laden, ggf.
dekomprimieren, prüfen, ob in der Punkteliste einer mit dem aktuellen y ist, bei
horizontalen Geraden alle Punkte setzen/ändern falls y übereinstimmt, bei
vertikalen immer Punkt x setzen, oder allgemein für jede Gerade x(y) berechnen
und falls innerhalb des Bildes setzen. Dann die Zeile zurückschreiben. Bei
unkomprimierten BMP kannst Du direkt in das gleiche File zurückschreiben
(sinnvoll wenn Du zu wenig Plattenplatz hast, aber unsicher, zumindest in der
Testphase).
Falls die Bilder alle aus einer Quelle kommen sieh Dir zuerst man an, ob sie
komprimiert sind, falls nein kannst Du Dir das sparen.


Gruß
Dimitri

Vesa Klumpp

unread,
Dec 3, 1997, 3:00:00 AM12/3/97
to

Tag Nicky!

NR> In Bitmap-Grafiken soll die Farbe einzelner Pixel geändert

NR> werden, bzw. sollen Linien in eine vorhandene Bitmap-Grafik
NR> "gezeichnet" werden. Zusätzliches Problem: Die Größe der
NR> bmp-Dateien (ab 20MB aufwärts, unkomprimiert) erfordert es,
NR> die Änderungen gleich direkt in der Datei (auf Platte)
NR> vorzunehmen.

Du könntest z.B. das File direkt auf der Platte bearbeiten.
Du schreibst einfach ein Paar Funktionen zum schreiben und lesen eines
bestimmten Bildabschnittes (oder Pixels (extrem lahm)). Die Fkts sollen
dann einfach die Daten aus der Datei in einen Puffer lesen oder daraus
schreiben. So würde ich es machen.

Tschüß,
Vesa

Vesa Klumpp

unread,
Dec 4, 1997, 3:00:00 AM12/4/97
to

Tag Dimitri!

DJ> BMP Dateien liegen meist ungepackt vor, ansonsten ist da eine Lauflängen-
DJ> kodierung drin. Ich würde es also bei Speichermangel so machen:
DJ> Einzelne Punkte: nach y sortieren, dann Zeile für Zeile laden, ggf.
DJ> dekomprimieren, prüfen, ob in der Punkteliste einer mit dem aktuellen y
DJ> ist, bei horizontalen Geraden alle Punkte setzen/ändern falls y
DJ> übereinstimmt, bei vertikalen immer Punkt x setzen, oder allgemein für
DJ> jede Gerade x(y) berechnen und falls innerhalb des Bildes setzen. Dann die
DJ> Zeile zurückschreiben.
Eine gute Idee!
Nur was willst du denn machen, wenn deine neue RLE-komprimierte Zeile mehr
Speicherplatz als die alte braucht? Willst du dann den ganzen Rest der
Datei verschieben?
...aber ich glaube kaum, daß eine 20MB große BMP-Datei gepackt ist. :)

Tschüß,
Vesa

Nicky Rother

unread,
Dec 5, 1997, 3:00:00 AM12/5/97
to

Servus!

Die zu verändernden Bitmap-Grafiken liegen im
Windows-Bitmap-Format (*.bmp) vor, und zwar
unkomprimiert.

Als Entwicklungssystem steht "Borland C für DOS"
zur Verfügung.

Für die zu verändernden Pixel liegen als Informationen
der Farbwert sowie die x- und y-Koordinate vor (sollte
doch reichen, oder?).

Nun suche ich Routinen, um entsprechende Informationen
(hor. und ver. Anzahl der Pixel des Bildes, Farbtiefe
sowie Anfang der eigentlichen Pixel) auszulesen und danach
die entsprechenden Pixel zu ändern - an der Größe sowie
der Farbtiefe der Datei ändert sich nichts!

-- Bin für jede Anregung dankbar! --


MfG
Nicky

Dimitri Junker

unread,
Dec 7, 1997, 3:00:00 AM12/7/97
to

Hallihallo Vesa!

VK>Nur was willst du denn machen, wenn deine neue RLE-komprimierte Zeile
VK>mehr Speicherplatz als die alte braucht?
Eine Zeile später stand:
DJ>Bei unkomprimierten BMP kannst Du direkt in das gleiche File
DJ>zurückschreiben
Falls sie komprimiert ist muß man halt in ein neues File schreiben. Man kann ja
dann am Ende das alte löschen und das neue umbenennen.


Bye
Dimitri

Marcus Ohlhaut

unread,
Dec 10, 1997, 3:00:00 AM12/10/97
to

>Falls sie komprimiert ist muß man halt in ein neues File schreiben. Man
>kann ja dann am Ende das alte löschen und das neue umbenennen.

Und hat damit erfolgreich evtl. Zugriffsrechte, die für die alte Datei
gesetzt oder eingeschränkt waren, für immer zerstört. :-(

- Marcus [PGP]

Dimitri Junker

unread,
Dec 12, 1997, 3:00:00 AM12/12/97
to

Hallo Marcus!

MO>Und hat damit erfolgreich evtl. Zugriffsrechte, die für die alte Datei
MO>gesetzt oder eingeschränkt waren, für immer zerstört. :-(
Ich dachte er benutzt DOS. Da gibt's doch sowas nicht oder? Und wenn, dann muß
man halt diese Infos irgendwie übertragen


Gruß
Dimitri

Marcus Ohlhaut

unread,
Dec 14, 1997, 3:00:00 AM12/14/97
to

Kommentar zu A63701@AC3

>Ich dachte er benutzt DOS. Da gibt's doch sowas nicht oder? Und wenn,
>dann muß man halt diese Infos irgendwie übertragen

Nein, man programmiert es von Anfang an richtig, und muß sich dann keine
Gedanken mehr ums "irgendwie" machen.

- Marcus [PGP]

Dimitri Junker

unread,
Dec 18, 1997, 3:00:00 AM12/18/97
to

Hallihallo Marcus!

MO>und muß sich dann keine Gedanken mehr ums "irgendwie" machen.
Das irgendwie bezog sich darauf, daß ich nicht weiß wie das unter DOS geht.


Bye
Dimitri

0 new messages