Registriert seit: 24. Mär 2009
364 Beiträge
|
AW: Problem mit TColor
4. Sep 2010, 13:38
ne ich zähle am ende der schleife das pixel hoch
also ich kann ja mal den code der ganzen unit posten (ich dachte das sei nicht soo wichtig)
so aber irgendwie klappt das alles nicht :/ :
Delphi-Quellcode:
type
TCodieren = class(Tobject)
public
constructor Create(ParaBild : TImage; ParaText : String);
function Rueckgabe : TPicture ;
private
Text : String ;
Bild : TImage ;
AnzahlPixelX,
AnzahlPixelY : integer;
procedure Verstecken ;
function IntToBin(Int : Integer) : String ;
function Pixel_aendern(Bit1, bit2, bit3 : byte; Farbe : Tcolor ) : TColor ;
procedure Pixelerhoehen(var XPixel, YPixel : integer) ;
function Letztes_Bit_0(Eingang : byte) : byte ;
function Letztes_Bit_1(Eingang : byte) : byte ;
end;
implementation
constructor TCodieren.Create(ParaBild: TImage; ParaText: string);
begin
Text := ParaText ;
Bild:= ParaBild ;
AnzahlPixelX := Bild.Width ;
AnzahlPixelY := Bild.Height;
end;
function Tcodieren.Rueckgabe;
begin
Verstecken;
Result := Bild.Picture ;
end;
// private ;
procedure Tcodieren.Verstecken;
var
i, j, k ,
PixelX, PixelY : integer ;
Farbe : TColor;
Str_BinaerBuchstabe : string ;
BitArray : Array[1..9] of byte;
begin
PixelX := 0 ;
PixelY := 0 ;
BitArray[9] := 0 ;
for i := 1 to Length(text) do
begin
Str_BinaerBuchstabe := IntToBin(Ord(Text[i]));
for j := 1 to 8 do
begin
BitArray[j] := StrToInt(Str_BinaerBuchstabe[j]);
end;
for k := 1 to 3 do
begin
Farbe := Bild.Canvas.Pixels[PixelX,PixelY] ;
case k of
1 : Bild.Canvas.Pixels[PixelX,PixelY] := Pixel_aendern(BitArray[1],
BitArray[2],
BitArray[3],
Farbe);
2 : Bild.Canvas.Pixels[PixelX,PixelY] := Pixel_aendern(BitArray[4],
BitArray[5],
BitArray[6],
Farbe);
3 : Bild.Canvas.Pixels[PixelX,PixelY] := Pixel_aendern(BitArray[7],
BitArray[8],
BitArray[9],
Farbe);
end;
Pixelerhoehen(PixelX,PixelY);
end;
end;
end;
function TCodieren.IntToBin(Int: Integer): String;
var
i : Integer;
begin
Result := '';
for i := 7 downto 0 do
begin
Result := Result + IntToStr((Int shr i) and 1);
end;
end;
function TCodieren.Pixel_aendern(Bit1: Byte; bit2: Byte; bit3: Byte; Farbe: TColor) : TColor;
var
BValue,
GValue,
RValue : integer ;
begin
BValue := GetBValue(Farbe) ;
GValue := GetGValue(Farbe);
RValue := GetRValue(Farbe);
BValue := Letztes_Bit_0(BValue);
GValue := Letztes_Bit_0(GValue);
RValue := Letztes_Bit_0(RValue);
if Bit1 = 1 then
BValue := Letztes_Bit_1(BValue);
if Bit2 = 1 then
GValue := Letztes_Bit_1(GValue);
if Bit3 = 1 then
RValue := Letztes_Bit_1(RValue);
Result := TColor(Integer(IntToBin(BValue) + IntToBin(GValue)
+ IntToBin(RValue)));
end;
procedure TCodieren.Pixelerhoehen(var XPixel: Integer; var YPixel: Integer);
begin
if (XPixel + 1) < AnzahlPixelX then
begin
inc(XPixel)
end
else
begin
XPixel := 0 ;
inc(YPixel);
end;
end;
function TCodieren.Letztes_Bit_0(Eingang: Byte) : byte ;
begin
Eingang := Eingang shr 1 ;
Result := Eingang shl 1 ;
end;
function TCodieren.Letztes_Bit_1(Eingang: Byte) : byte ;
begin
Result := (Eingang or $01 ); //00000001);
end;
|
|
Zitat
|