Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Transponierte Bitmaps


Dee-Jay - Di 10.03.09 22:42
Titel: Transponierte Bitmaps
Hallo Forum!
Ich muss in meinem Informatikkurs morgen früh ein Referat über Transponierte Bitmaps halten. Bei dieser Methode der Veschlüsselung geht es darum, einzelne Pixel eines Bitmaps wiederholt zu verschieben, sodass nach einige Durchgängen ein Verschlüsseltes Bild entsteht. Habe schon mit Hilfe der vorgegebenen Materialien etwas auf die Reihe bekommen. Jetzt habe ich das problem, dass ich das Verschlüsselte bild nicht mehr Entschlüsseln kann. Ich hoffe ihr könnt mir helfen, hier der Code:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure TForm1.Button1Click(Sender: TObject);
var c:tcolor;
    w,I,J,I2,J2:Integer;
begin
 w:=image1.width;
 for i:=0 to w-1 do
  begin
   for J:=0 to w-1 do
    begin
     c:=image1.canvas.pixels[J,I];
     I2:=J;
     J2:=I+J;
     If I2 > w then I2:=I2-w;
     If J2 > w then J2:=J2-w;
     Image2.canvas.pixels[J2,I2]:=C;
    end{for j}
   image2.refresh;
   end;
  For I:=0 to w-1 do
   For J:=0 to w-1 do
    Image1.canvas.pixels[I,J]:= Image2.canvas.pixels[I,J];
end;

Vielen Dank im Vorraus!
Gruß Dee-Jay

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt

---Moderiert von user profile iconNarses: Beiträge zusammengefasst und Titel "entdrängelt"---

ok hat sich erledigt habs geschafft!


elundril - Mi 11.03.09 12:18

Hallo und :welcome: im DF,

könntest du vielleicht deinen code hier poasten damit alle user einen nutzen daraus ziehen können?

ein paar verbessungsvorschläfge:

vielleicht kannst du scanline verwenden statt pixels dadurch würde dein code um einiges schneller werden.
ich nehm an das dein image2 nur als zwischenspeicher für dein bild dient. Wenn ja kannst du das wegschmeißen und dafür ein TBitmap-Objekt lokal anlegen.
Das die schleifen kannst mit dem Image1.canvas.pixxels[I,J] := Image2.canvas.pixels[I,J]; kannst du durch diesen diesen befehl: Image1.canvas.draw(0,0,Bitmap); ersetzen. (ich hab als parameter einfahc bitmap geschrieben damit du weißt welchen parameter die funktion erwaretet und in hoffnung das du meinen zweiten vorschlag umsetzt ;-) )

lg elundril