Entwickler-Ecke

Multimedia / Grafik - Bild Zerschneiden


Karabulut - Fr 22.08.03 16:30
Titel: Bild Zerschneiden
ist es möglich en bild einzulesen, und dass in sagen wir mal, jeweils 20x20 pixel grosse teile zu zerschneiden. diese teile dan mit 2 pixel abstand einanderzuordnen?


Aya - Fr 22.08.03 16:40
Titel: Re: Bild Zerschneiden
Hi,
Karabulut hat folgendes geschrieben:
ist es möglich en bild einzulesen, und dass in sagen wir mal, jeweils 20x20 pixel grosse teile zu zerschneiden. diese teile dan mit 2 pixel abstand einanderzuordnen?

Ja, das ist möglich :P
(Oder wolltest du jetzt nochmehr wissen? *grinst frech*)

Au'revoir,
Aya~


Karabulut - Fr 22.08.03 16:41

jo wär gut zu wissen wie ;D


Aya - Fr 22.08.03 16:45

Karabulut hat folgendes geschrieben:
jo wär gut zu wissen wie ;D

hihi :P
Ne, also.. du mußt das Bild halt in z.B. nen TBitmap laden.

Dann erstellst du dir ein zweites TBitmap welches die Breite = Bitmap1.Widht + (Bitmap1.Width div 20 * 2) hat (für die höhe entsprechend gleich), worein du dann die einzelnen stücke mit 2px abstand zeichnest.

Dann gehst du dein Bitmap1 in ner for-schleife durch und kopierst immer ein 20x20 großes Recht von Bitmap1 auf Bitmap2 (Suche in: Delphi-Forum, Delphi-Library CANVAS.COPYRECT).

Das war's.. ;)

Nen kompletten Code werde ich dir nich basteln, da immerhin du das programmieren willst, und nicht ich.. aber wenn du an einer stelle festhängst frag ruhig, werde helfen wo ich kann :)

(Das war jetzt die Theorie.. ich hab KA was du in Delphi kannst, adher weiß ich nich ob du weißt wie man nen TBitmap erstellt etc.. *g* Also einfach fragen bei fragen)

Au'revoir,
Aya~


Karabulut - Fr 22.08.03 19:20

also ich lade das bild als image rein
da ich das schneiden per button auslösen will, also der benützer selber kann am bild nichts machen
ich hab aber zur zeit folgendes problem:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
if OpenPictureDialog1.Execute then
  begin
   CurrentFile := OpenPictureDialog1.FileName;
   Image1.Picture.LoadFromFile(CurrentFile);
end;
end;


das bild darf nicht grösser als 192 * 256 sein und nur eine farbtiefe von 256 farben besitzen. wie frage ich das jetzt da ab?
falls es die obigen anforderungen nicht erfüllt, soll das bild nicht angezeigt werden, sondern eine fehlermeldung kommen.
bitte um hilfe :D

achja, wegen der frage wie gut ich bin :D sieht man hier ja , bin schlecht ^^


Karabulut - Sa 23.08.03 12:10

naja, konnte das problem selber lösen. hab jetzt aber eine andere frage :D

Delphi-Quelltext
1:
2:
3:
4:
Vorlage := TBitmap.Create;
      Vorlage.Width := 400;
      Vorlage.Height := 400;
      Image2.Picture.Graphic := Vorlage;

also ich erstelle hier ein TBitmap. das bitmap wird auch angezeigt, also komplett weiss. wie kann ich per butotn das bild färben? ich hatte es so probiert

Delphi-Quelltext
1:
vorlage.canvas.brush.color := clblack;                    

geht aber ned
hilfe :D


Aya - Sa 23.08.03 14:15

Mit Canvas.Brush.Color legst du nur die Farbe für den Pinsel fest. Benutz dannach mal:


Delphi-Quelltext
1:
2:
Vorlange.Canvas.Brush.Color:=clBlack;
Vorlage.Canvas.FillRect(Vorlage.ClientRect);


Damit füllst du deine Vorlage mit der in Brush.Color angegebenen Farbe ;)

Au'revoir,
Aya~


Karabulut - Sa 23.08.03 15:03

das ClientRect wird bei meinem delphi nicht erkannt
kommt immer undeklarierter blabal :D
muss ich dazu was weiteres in Uses schreiben?


Aya - Sa 23.08.03 15:06

Hi,

sorry.. hab mich verlesen *pfeift* Dachte du benutzt TImage :)

Beim TBitmap muß es so sein:

Delphi-Quelltext
1:
Vorlage.Canvas.FillRect(Rect(0,0,Vorlage.Width,Vorlage.Height));                    


Au'revoir,
Aya~


Karabulut - Sa 23.08.03 15:14

:D
frage ^^

ich ruf per panelclick das farbenfenster auf, die farbe die ich wähle soll jetzt die hintergrudnfarbe von dem TBitmap sien


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Panel2Click(Sender: TObject);
begin
   if colordialog1.Execute then
   begin
    hintergrund := colordialog1.Color;
    Vorlage.Canvas.Brush.Color:= hintergrund;
    Vorlage.Canvas.FillRect(Rect(0,0,Vorlage.Width,Vorlage.Height));
   end;
end;


habs so gemacht, färb sich aber ned, wasn daran falsch


Aya - Sa 23.08.03 15:26

Hi,

Vorlage ist ein TBitmap, ja???
Das TBitmap mußt du ja dann erstnoch irgendwo draufzeichnen, machst du das???

Au'revoir,
Aya~


Karabulut - Mi 27.08.03 16:49

soweit ich weiss schon :D
so erstelle ich das TBitmap


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
var vorlage : TBitmap;

Vorlage := TBitmap.Create;
      Vorlage.Width := 400;
      Vorlage.Height := 400;
      Image2.Picture.Graphic := Vorlage;


und hier will ich die farbe wählen


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Panel2Click(Sender: TObject);
begin
   if colordialog1.Execute then
   begin
    hintergrund := colordialog1.Color;
    Vorlage.Canvas.Brush.Color:= hintergrund;
    Vorlage.Canvas.FillRect(Rect(0,0,Vorlage.Width,Vorlage.Height));
   end;
end;


Aya - Mi 27.08.03 18:35

Hi,

mach mal aus dieser Zeile:

Delphi-Quelltext
1:
Image2.Picture.Graphic := Vorlage;                    

lieber dashier:

Delphi-Quelltext
1:
Image2.Picture.Bitmap.Assign(Vorlage);                    


und deine 2te Procedure so:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.Panel2Click(Sender: TObject); 
begin 
   if colordialog1.Execute then 
   begin 
    hintergrund := colordialog1.Color; 
    Vorlage.Canvas.Brush.Color:= hintergrund; 
    Vorlage.Canvas.FillRect(Rect(0,0,Vorlage.Width,Vorlage.Height)); 
    Image2.Picture.Bitmap.Assign(Vorlage);
   end; 
end;


Au'revoir,
Aya~


Karabulut - Sa 30.08.03 14:53

joa du bist gut :D
nur noch ein stückchen und ich habs ;D

jetzt muss ich nur noch dsa mit dem schneiden haben, das peil ich ned so ganz, vor allem die for-schleife
also ich hab nen button
bei buttonclick soll ja das bild dann vollständig geschnitten werden und dann die teile auf das zweite bitmap gelegt werden
wie geht das nun?


FeG - Sa 30.08.03 15:05

Hi,

du gehst das Bitmap in 20er Schritten und zwei Schleifen durch

Delphi-Quelltext
1:
2:
for i:=0 to Bitmap.Width div 20 do
  for j:=0 to Bitmap.Height div 20 do ...


Zeichnest das entprechende Rechteck in ein zweites Bitmap (.Draw), immer mit ein bisschen Rand (in Abhängigkeit von i, nämlich ...+i*2), ebenso den Rand für die höhe berechnen...

Und dann einfach Gehirn einschalten und loslegen... :wink:

MfG,
FeG


Karabulut - Mo 01.09.03 12:32

aber ich kenn die einzelnen delphi-draw befehle noch ned :D
helft mir bitte ein bissl mehr ;D


FeG - Mo 01.09.03 15:34

Karabulut hat folgendes geschrieben:
aber ich kenn die einzelnen delphi-draw befehle noch ned :D

Die einzelnen?? :lol:

Soviel gibt's da ja nun wirklich net... nämlich:

1) Canvas.Draw - "normales" Zeichnen
2) Canvas.StrechDraw - "gestrecktes" Zeichnen

Wobei du Draw brauchst...

Mach einfach mal, soweit du kommst, und wenn du noch Fragen zu einem speziellen Problem hast, meld dich wieder hier...

MfG,
FeG


Karabulut - Mo 01.09.03 16:30

naja, das prob ist ja eigentlich das ich so ziemlich 0 ahnung hab :D
ich weiss eben ned wie ich den jetzt dazu kriege das er auf buttonclick dasbild schneidet und rüber kopiert.

da macht mich die for-schleife auch ned klüger :D


FeG - Mo 01.09.03 18:58

Karabulut hat folgendes geschrieben:
naja, das prob ist ja eigentlich das ich so ziemlich 0 ahnung hab :D

Das ist dann allerdings ein grundsätzliches Problem... wie wär's mal mit ein paar Tutorials zum Thema??

Ich werde dir hier keinen kompletten Quellcode liefern, allerdings will ich mal versuchen, das ganze noch mal Schritt für Schritt und langsam zu erklären...

- Du nimmst drei TBitmaps.
- Ins eine lädts du das zu zerschneidende Bild.
- Das zweite ist das Zielbitmap.
- Das dritte fungiert als Zwischenablage.
- Dann nimmst du zwei for - Schleifen, um Bild1 horizontal und vertikal durchzugehen
- Bei jedem Schleifendurchlauf kopierst du einen 20x20 großen Ausschnitt aus Bild1 in Bild3. Dann machst du ein Draw auf Bild2 mit Bild3 (Bild3 als Parameter von Bild1.Canvas.Draw) und zwar an eine Stelle, die von den beiden Schleifenvariablen abhängt. Nennen wir die horizontale Schleifenvariablen i. Dann sähe die Formel für das setzen in horizontaler Position so aus:

Delphi-Quelltext
1:
i*20+i*2                    

^^ Die *20 als "Hauptposition", damit die Stücke wieder in 20er-Schritten drangesetzt werden, die *2 als Abstand.

Und auf die Weise fügst du alle Bildteile ein...

Wenn was unklar ist, bitte bei mir beschweren :wink:

MfG,
FeG


Niels_ - Do 04.09.03 18:31
Titel: Jpg auch möglich??
kann ich ein bild (typ JPG) auch zerschneiden??? Denn das wäre doch mal was tolles!