![]() |
Delphi-Version: 5
Integer in Farbwerte zerlegen und dann jeweils auslesen
Hallo
Das nächste Problem ich bin wieder dabei dieses Verstecken Programm weiter zumachen. Ich habe da jetzt ein Pixel in die RGB Werte zerlegt und bekomme diese ach angezeigt. Dann sag ich als viertes bit soll eine Zahl rein das klappt auch. Das ganze speicher ich dann in eine Datei. Aber das auslesen funktioniert nicht und ich weiß nicht warum nicht?
Delphi-Quellcode:
unit Unit1;
{$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Edit1: TEdit; Image1: TImage; Image2: TImage; Image3: TImage; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; OpenDialog1: TOpenDialog; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Image2Click(Sender: TObject); private { private declarations } public { public declarations } end; var Form1: TForm1; datei: file of integer; const Dateiname=('Versteckt.dat'); implementation {$R *.lfm} { TForm1 } procedure TForm1.Button1Click(Sender: TObject); VAR pfad:string; begin if opendialog1.execute then begin pfad:=opendialog1.filename; image1.picture.loadfromfile(pfad); end; end; procedure TForm1.Button2Click(Sender: TObject); var Bildbreite,Bildhoehe,Zeile,Spalte,X,Y,farbe,r,g,b,v,Versteckte_Zahl,f:integer; begin Bildbreite:=image1.Width; Bildhoehe:=image1.height; //For zeile:=0 to bildbreite-1 do // begin // For spalte:=0 to bildhoehe-1 do // begin // farbe:=image1.canvas.pixels[zeile,spalte]; farbe:=image1.canvas.pixels[270,80]; Versteckte_Zahl:=80; r:=farbe and $0000FF; g:=(farbe and $00FF00) shr 8; b:=(farbe and $FF0000) shr 16; v:=versteckte_Zahl + farbe and $FF000000; //image2.canvas.pixels[zeile,spalte]:=r; label1.caption:=('rot: '+inttostr(r)); label2.caption:=('grün: '+inttostr(g)); label3.caption:=('blau: '+inttostr(b)); label4.caption:=('Versteckte_Zahl: '+ inttostr(v)); image2.Canvas.brush.color:=farbe; image2.canvas.fillrect(rect(0,0,300,300)); f:=r+g+b+v; ASSIGNFILE(DATEI,DATEINAME); REWRITE(DATEI); WRITE(DATEI,f); Closefile(Datei); end; procedure TForm1.Button3Click(Sender: TObject); var s,r,g,b,v,versteckte_Zahl:integer; begin ASSIGNFILE(DATEI,'versteckt.dat'); Reset(datei); Read(datei,s); //Farb Wert als integer showmessage(inttostr(s)); //image3.Canvas.brush.Color:=s; r:=s and $0000FF; //Rotwert als integer g:=(s and $00FF00) shr 8; //Grünwert als integer b:=(s and $FF0000)shr 16; //Blauwert als integer v:=versteckte_Zahl + s and $FF000000; //Zahl die verschlüsselt werden soll showmessage(inttostr(r)); //Anzeigen der einzelnen Werte showmessage(inttostr(g)); showmessage(inttostr(b)); showmessage(inttostr(v)); //image3.canvas.fillrect(rect(0,0,90,90)); Closefile(datei); end; procedure TForm1.Image2Click(Sender: TObject); begin end; end. |
AW: Integer in Farbwerte zerlegen und dann jeweils auslesen
Du schreibst ja nur eine Wert. Warum verwendest du nicht die Metoden, der werwendeten Klassen?
|
AW: Integer in Farbwerte zerlegen und dann jeweils auslesen
Deiner Variablen "verstecke_Zahl" wird nirgends ein Wert zugewiesen,
da steht irgendwas drin
Delphi-Quellcode:
Nebeibei bemerkt, warum definierst du dir eine (globale) Variable "Dateiname", wenn
procedure TForm1.Button3Click(Sender: TObject);
var s,r,g,b,v,versteckte_Zahl:integer; begin {...} v:=versteckte_Zahl + s and $FF000000; //Zahl die verschlüsselt werden soll {...} end; du sie nicht nutzt?
Delphi-Quellcode:
ASSIGNFILE(DATEI,'versteckt.dat');
|
AW: Integer in Farbwerte zerlegen und dann jeweils auslesen
versteckte zahl soll das ja sein was ich vorher bei dem Button 2 in dieses erste bit reingeschrieben habe.
|
AW: Integer in Farbwerte zerlegen und dann jeweils auslesen
Zitat:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var Bildbreite,Bildhoehe,Zeile,Spalte,X,Y,farbe,r,g,b,v,Versteckte_Zahl,f:integer; //<== hier begin {...} Versteckte_Zahl:=80; {...}end; procedure TForm1.Button3Click(Sender: TObject); var s,r,g,b,v,versteckte_Zahl:integer; //<== hier begin {...} v:=versteckte_Zahl + s and $FF000000; //Zahl die verschlüsselt werden soll {...}end; |
AW: Integer in Farbwerte zerlegen und dann jeweils auslesen
ok ich hab das dann jetzt raus genommen aus dem Button 3
so müsste ich doch jetzt in v diesen Zahlenwert drinne stehen haben? Aber es klappt immer noch nicht
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var s,r,g,b,v; begin ASSIGNFILE(DATEI,'versteckt.dat'); Reset(datei); Read(datei,s); //Farb Wert als integer showmessage(inttostr(s)); //image3.Canvas.brush.Color:=s; r:=s and $0000FF; //Rotwert als integer g:=(s and $00FF00) shr 8; //Grünwert als integer b:=(s and $FF0000)shr 16; //Blauwert als integer v:=$FF000000 shr 32; //Zahl die verschlüsselt werden soll showmessage(inttostr(r)); //Anzeigen der einzelnen Werte showmessage(inttostr(g)); showmessage(inttostr(b)); showmessage(inttostr(v)); //image3.canvas.fillrect(rect(0,0,90,90)); Closefile(datei); end; |
AW: Integer in Farbwerte zerlegen und dann jeweils auslesen
und wo soll jetzt der Wert herkommen?
|
AW: Integer in Farbwerte zerlegen und dann jeweils auslesen
den habe ich doch in der Datei gespeichert.
Da sollten meiner Meinung nach jetzt der Rot,Grün,Blau und V drinne stehen. alles aus Button 2 |
AW: Integer in Farbwerte zerlegen und dann jeweils auslesen
Zitat:
|
AW: Integer in Farbwerte zerlegen und dann jeweils auslesen
Nein, du schreibst nur einen Wert (f)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz