Autor Beitrag
Tigu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 93

XP
Delphi 7
BeitragVerfasst: Fr 29.09.06 11:24 
Hallo!
Ich brauch mal wieder eure Hilfe.
Ich soll eine bmp-Datei als char in ein Memofeld einlesen und dann die Farbe und Größe ändern und das dann speichern können. Habe dazu leider keine Idde.
Bis jetzt sollte ich txt-Datein in verschiedenen Typen speichern und lesen.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
........
procedure TForm1.realschreiben;
var f: File of real;
    k: integer;
    geschrieben:real;
begin
if MessageDlg('Wollen Sie die vorhandene Datei wirklich überschreiben?', mtConfirmation,[mbYes, mbNo],0)= mrYes then
 begin
 Assignfile(f,edit2.Text);
 ReWrite(f);
 for k:=0 to Memo.Lines.Count-1 do
  begin
  geschrieben:=StrToInt(memo.lines[k]);
  write(f,geschrieben);
  end;
 closefile(f);
 end
else
MessageDlg('Die Zahlen sind nicht gespeichert worden!',mtInformation,[mbOK],0);
end;
..........

Das habe ich ja für integer und real recht leicht so lösen können (ist ja fast das gleiche), aber wie kann ich das (der Quelltextausschnitt ist fürs speichern) für ein Bild (bmp) machen? Auf diese weise funktioniert es ja nicht. Oder stelle ich mich nur zu blöd dafür an? :gruebel:

Freue mich über eure Antworten und bedanke mich schon einmal dafür.
Tigu
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Fr 29.09.06 11:28 
Eine BMP datei enthält das EOT zeichen... End of Text. Ab da wird weder in TStringList noch ins Memo weiter geladen. Folglich is das speichern auch eher schwer. Als einzige Möglichkeit kenne ich TFileStream, mit dem man auch Laden und Speichern kann. Wie du die Größe einer BMP datei änderst, ist eine andere Frage, den Berechnungsalgorithmus dafür kenn ich nicht ..

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Tigu Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 93

XP
Delphi 7
BeitragVerfasst: Fr 29.09.06 11:32 
Das mit der Größe und Farbe ist ja auch zweitrangig und für mich ersteinmal sehr weit in den Hintergrund gerückt, weil bevor ich keine Idee zum einlesen und speichern habe, brauche ich daran ja garnicht zu denken.
chaosben
Hält's aus hier
Beiträge: 10

Win 7 Professional 64bit
Delphi 2009 Professional
BeitragVerfasst: Fr 29.09.06 11:46 
Das Problem sind die nicht-druckbaren Zeichnen. Du musst dir also erst darüber klar werden, wie diese dargestellt werden sollen (gar nicht, als Int/Hex, ...).
Wenn du das entschieden hast,könntest du die Datei als TFileStream/TMemoStream öffnen. Danach kannst du mit einer Schleife durch den Stream wandern und alle Bytes in druckbare Zeichen umwandeln und deinem Zieltext zuweisen.

_________________
visit TheUnknownOnes
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Fr 29.09.06 11:49 
Erklär mal bitte genauer, was du vorhast. Versteh ich dich richtig, dass du eine Art Editor für Bitmaps bauen willst, aber ohne das Bild anzeigen zu lassen? :shock: Also ein Malprogramm auf HexEditor-Basis?

Was meinst du überhaupt mit Bitmap als Char? Erläuter das mal an einem Beispiel, mit einem kleinen Bitmap, wie es in der Memo aussehen soll, und was du wie ändern willst...:gruebel:

_________________
We are, we were and will not be.
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Fr 29.09.06 11:50 
Egal, womit es eingelesen wird. Sobald ein EOT kommt, wird eine Darstellung im Memo unmöglich.
Einzige Idee, die ich habe: Alle Sonderzeichen in Etwas umwandeln, dass darstellbar ist. Dazu parallel eine Liste führen, welche Zeichen betroffen waren und wo diese stehen, damit hinterher eine Rückumwandlung möglich ist.
Tigu Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 93

XP
Delphi 7
BeitragVerfasst: Fr 29.09.06 12:51 
@Gausi: Ich habe die Aufgabe in der Schule so bekommen: "Lesen Sie eine Bmp-Datei ein und versuchen Sie, die Farbe und Größe dieser zu ändern und dies dann zu speichern."
Das ganze sollen wir in dem Projekt machen, was wir vorher erstellt haben. Daraus folgt, dass ich eine Memofeld zur Ausgabe habe.
Es soll, wenn ich das richtig verstanden habe, kein Malprgramm oder änliches werden. (Hoffe ich doch!) Vorher sollten wir ja Datein als real und integer speichern, damit wir die Verschiedenen Speicherarten/Speichergrößen sehen können.
Ich weiß wirklich nicht, wie das gehen soll und hoffe, dass Ihr mir einen Anstoß geben könnt.
Tigu

PS: Es soll angeblich ganz leicht und schnell zu realisieren sein. Häääääääää?:?!?:
Horschdware
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 744
Erhaltene Danke: 54

Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
BeitragVerfasst: Fr 29.09.06 13:14 
Dann wird das wohl so gedacht sein, dass die BMP in ein TImage o.ä. geladen wird und dann dort verändert wird.

Bei solchen "Schulaufgaben" ist es meiner Erfahrung nach so, dass mal als etwas erfahrenerer Programmierer sich viel zu viele Gedanken macht, obwohl das Level, auf dem das stattfinden sollte bedeutend niedriger gedacht war.

_________________
Delphi: XE - OS: Windows 7 Professional x64


Zuletzt bearbeitet von Horschdware am Fr 29.09.06 13:42, insgesamt 1-mal bearbeitet
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Fr 29.09.06 13:39 
Ok, dann sind es wahrscheinlich auch nicht beliebige Bitmaps, sondern einfarbige :mrgreen:

Anzeigen sollte man ein Bitmap in einer TImage-Komponente. Die kann auch direkt aus einer Datei laden und speichern.

Für die Größen-Änderung bearbeitet man am einfachsten über zwei Edits die Eigenschaft Width und Height von Image1.Picture.Bitmap

Für die Farbauswahl gibts den ColorDialog.

Zum malen auf dem Bild sollte Canvas.Rect/Drawrect/Fillrect in der entsprechenden Farbe ausreichen.

Anschließend Image1.Picture.Bitmap.SaveToFile - fertig.

_________________
We are, we were and will not be.
Tigu Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 93

XP
Delphi 7
BeitragVerfasst: Fr 29.09.06 17:15 
Dank euch allen für eure Antworten. :zustimm:
Eine Frage habe ich aber noch dazu. Gibt es eine Möglichkeit zum Beispiel nur die erste Zeil der bmp-Datei auszulesen, zu verändern und dann wieder zu speichern? :roll:
Horschdware
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 744
Erhaltene Danke: 54

Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
BeitragVerfasst: Fr 29.09.06 18:25 
Dann sag mir doch mal bitte, was die erste zeile der BMP Datei ist *g*

Du kannst die BMP Datei nicht als Textdatei auffassen.
Wie gesagt enthält eine BMP z.B. das EOT Zeichen (s.o.)
Wenn du in Zeilen sprichst, dann erwartest du ja einen Zeilenumbruch.
Den muss es in der BMP nicht zwangsläufig geben.

Du kansnt die Datei trotzdem als Stream einlesen.
Wie das geht steht hier im Forum (Forensuche nutzen)

_________________
Delphi: XE - OS: Windows 7 Professional x64
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Fr 29.09.06 18:33 
Über die Textdatei und Memo sind wir schon hinaus ;-) - wir laden die bmp-Datei jetzt in ein TImage.

Die erste Zeile in der bmp-Datei ist die erste Zeile in dem Bild, würde ich mal sagen.

Und ja, man kann die erste Zeile umfärben. Entweder man malt eine Linie auf dem Canvas des Bitmaps und speichert das dann ab, oder man arbeitet mit Scanline und setzt da die Farbwerte der einzelnen Pixel neu. Generell würde ich mich mal über Canvas vertraut machen, was man da so alles drauf malen kann, und wie man die Eigenschaften (Color, Style, Width, etc.) des Stiftes (Pen) und des Pinsels (Brush) verändert.
Das ist aber nicht mehr unbedingt komplett trivial, da muss man schon ein bissel rumprobieren, wenn man noch nicht soviel Erfahrung mit Delphi hat.

_________________
We are, we were and will not be.
Horschdware
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 744
Erhaltene Danke: 54

Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
BeitragVerfasst: Mo 02.10.06 08:05 
Sorry, dann hab ich wohl den vorhergehenden Satz falsch verstanden.

_________________
Delphi: XE - OS: Windows 7 Professional x64
Tigu Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 93

XP
Delphi 7
BeitragVerfasst: Do 12.10.06 17:19 
Das hört sich ja alles sehr logisch an, aber kann mir jemand verraten, was für ein Sinn es machen soll, wenn ich ine bmp-Datei in ein TImage lade und dann wieder speichere, wenn die Aufgabe lautet, eine bmp-Datei als char auszugeben und zu speichern?
Das brauch ich dann ja nicht.
Liege ich jetzt völlig falsch? :?!?:
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1340
Erhaltene Danke: 120

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Do 12.10.06 17:51 
ich kappiere das ganze immer noch nicht! ein BMP hat eine recht komplexe struktur, im gegensatz zu einer textdatei mit zahlen drinne! das heißt ein BMP enthält binärdaten. zuerst einen header der die datei identifiziert, ihre größe und ihr format festlegt. dann folgt, je nach format eine fabtabelle oder nichts und im anschluss die eigentlichen bilddaten. also die pixel aus denen sich dann das bild zusammensetzt.
da kommt dann bei mir die frage mit der ersten zeile wieder hoch! wo bitte soll denn eine binärdatei, also nicht textdatei, zeilen haben?
mir kommt da wirklich nur die lösung mit TImage in den sinn. da lässt sich dann auch die größe ändern.
nur, wie mann dann die farbe ändern soll verstehe ich immer noch nicht. nun, man könnte sich jeden pixel vornhemen und ihm eine andere farbe geben. aber ist das der sinn?

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
Tigu Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 93

XP
Delphi 7
BeitragVerfasst: Do 12.10.06 18:37 
Selbst wenn ich die Änderungen, farbe, größe etc., weg lasse, bleibt die Frage nach dem char.
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1340
Erhaltene Danke: 120

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Do 12.10.06 18:40 
um was für eine art bitmap soll es sich denn handeln? hast du da eine beispieldatei von deinem lehrer bekommen?

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
Tigu Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 93

XP
Delphi 7
BeitragVerfasst: Do 12.10.06 18:41 
Nein, habe ich nicht. Ich glaube, dass ist ihm egal, aber warum fragst du? Spielt das eine Rollle?
rizla
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 417
Erhaltene Danke: 2

XP
FPC mit Lazarus
BeitragVerfasst: Do 12.10.06 18:47 
vllt sollen ja nur infos über das bitmap in dem memo ausgegeben werden?! :gruebel:

auf so ne bescheuerte idde kommt doch keen informatiklehrer, also ne bitmap in nem memo auszugeben, oder etwa doch? man, seit meinem letzten info-unterricht hat sich dann echt was verändert ;)

:r:

_________________
if you have what they want - they'll find a way to take it (bruce sterling)
WOW - 10 JAHRE Mitglied beim Delphi-Forum. Wie die Zeit vergeht, Freunde.
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Do 12.10.06 18:48 
Es spielt eine Rolle, wenn man den Sinn dieser Aufgabe verstehen möchte, den ich auch nicht sehe. Ein Bitmap als Char anzuzeigen ist ungefähr genauso sinnig wie eine mp3-Datei mit Photopaint bearbeiten zu wollen, oder ein Word-Dokument mit dem Mediaplayer abzuspielen.

Es sei denn, man hat Bitmaps, wie z.B. das im Anhang. Aber das ist nix für die Schule...
Einloggen, um Attachments anzusehen!
_________________
We are, we were and will not be.