Autor Beitrag
Basti-1988
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Di 29.11.05 10:00 
Hi ,ich soll auf arbeit einen ICON Editor basteln nun habe ich das problem und zwar habe ich Gitternetz wie auf den Bild zu sehen ist und dort möchte ich mit der Farbpaltte aus die Kästchen ausfüllen können,bloß bis jetzt hat es nie geklappt deshalb frage ich euch wie ich das realieren könnte!
Einloggen, um Attachments anzusehen!
Martin1966
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1068

Win 2000, Win XP
Delphi 7, Delphi 2005
BeitragVerfasst: Di 29.11.05 10:11 
Hallo! :wink2:

Dazu musst du uns wohl mehr als ein paar Sätze schreiben.

Außerdem wäre es von Vorteil wenn du uns schon etwas Sourcecode geben würdest damit wir sehen was du bereits gemacht hast und woran es vielleicht liegen könnte das es nicht klappt.

Lg Martin

_________________
Ein Nutzer der Ecke ;-)
Basti-1988 Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Di 29.11.05 10:17 
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
unit unEditor2;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, ColorGrd, ComCtrls;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    btnladen: TButton;
    btnSpeichern: TButton;
    btnbeenden: TButton;
    btnclear: TButton;
    GroupBox1: TGroupBox;
    Image1: TImage;
    ColorGrid2: TColorGrid;
    cbxGitterAnzeigen: TCheckBox;
    TrackBar1: TTrackBar;
    TrackBar2: TTrackBar;
    TrackBar3: TTrackBar;
    ColorDialog1: TColorDialog;
    Button1: TButton;
    procedure btnSpeichernClick(Sender: TObject);
    procedure btnladenClick(Sender: TObject);
    procedure btnclearClick(Sender: TObject);
    procedure btnbeendenClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure ColorGrid2Click(Sender: TObject);
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
   
    procedure Button1Click(Sender: TObject);
    procedure TrackBar1Change(Sender: TObject);
   // procedure GroupBox1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    procedure ClearImage(aDimension: Integer);
    procedure Gitteranzeigen;
    procedure Tone(Bit: TBitmap; r, g, b: Integer);
  
    procedure TrackBar3Change(Sender: TObject);
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.btnSpeichernClick(Sender: TObject);
begin
     Image1.Picture.SaveToFile('C:\bild.bmp');
end;

{procedure TForm1.btnladenClick(Sender: TObject);
begin
     Image1.Picture.LoadFromFile('C:\bild.bmp');
end;  }



procedure TForm1.btnclearClick(Sender: TObject);
var rect: TRect;
begin
  //Löscht gesamte Bildfläche
  ClearImage(32);
end;


procedure TForm1.btnbeendenClick(Sender: TObject);
begin
  if MessageDlg('Wollen Sie das Programm wirklich beenden',mtInformation,[mbYes,mbNo],0)= mrYes
  then
 Close;
end;

procedure TForm1.Gitteranzeigen;
begin
  if cbxGitterAnzeigen.Checked=true  then
  begin
    Image1.Canvas.Brush.Color:=clWhite;
    Image1.Canvas.FillRect(Image1.ClientRect);
    Image1.Canvas.Brush.Color:=clblack;

  end;
end;

procedure TForm1.ClearImage(aDimension: Integer);
var
  i: Integer;
begin
  Image1.Canvas.Pen.Color:=clWhite;
  Image1.Canvas.Brush.Color:=clWhite;
  Image1.Canvas.Pen.Style:=psSolid;
  Image1.Canvas.FillRect(Image1.ClientRect);
  Image1.Canvas.Pen.Color:=clblack;
  for i:=0 to aDimension do
  begin
    Image1.Canvas.MoveTo(0,Image1.Height div aDimension*i);
    Image1.Canvas.LineTo(Image1.Width,Image1.Height div aDimension*i);
  end;
  for i:=0 to aDimension do
  begin
    Image1.Canvas.MoveTo(Image1.Width div aDimension*i,0);
    Image1.Canvas.LineTo(Image1.Width div aDimension*i,Image1.Height);
  end;

end;

procedure TForm1.FormShow(Sender: TObject);
begin
  btnclearClick(self);
end;


procedure TForm1.ColorGrid2Click(Sender: TObject);
begin
   Image1.Canvas.Pen.Color := ColorGrid2.ForegroundColor;
end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
//  Image1.Canvas.LineTo(x,y);
end;

procedure TileGraphic(const ATile: TBitmap; const ATarget: TCanvas);
var
 X, Y: Integer;
begin
 Y:=0;

 while Y < ATarget.ClipRect.Bottom  do
 begin
   X:=0;

   while X < ATarget.ClipRect.Right do
   begin
     ATarget.Draw(X, Y, ATile);
     Inc(X, ATile.Width);
   end;

   Inc(Y,ATile.Height);
 end;
end;

procedure TForm1.btnladenClick(Sender: TObject);
var
 Bmp: TBitmap;
begin
 Bmp:=TBitmap.Create;
 try
   Bmp.LoadFromFile('C:\bild.bmp');

   TileGraphic(Bmp, Image1.Canvas);
 finally
   Bmp.Free;
 end;

end;

procedure TForm1.Tone(Bit: TBitmap; r,g,b: Integer);
type
  PixArray = Array [1..3] of Byte;
var
  p: ^PixArray;
  h,w,i: Integer;
begin
  For h:=0 to Bit.Height-1 do
  begin
    p:= Bit.ScanLine[h];
    For w:=0 to Bit.Width-1 do
    begin
      If (round(p^[1] * ( 1 + b/100))<0) then p^[1]:=0 else
         If (round(p^[1] * ( 1 + b/100))>255) then p^[1]:=255
         else p^[1]:= round(p^[1] * ( 1 + b/100));
        If (round(p^[2] * ( 1 + g/100))<0) then p^[2]:=0 else
         If (round(p^[2] * ( 1 + g/100))>255) then p^[2]:=255
         else p^[2]:= round(p^[2] * ( 1 + g/100));
      If (round(p^[3] * ( 1 + r/100))<0) then p^[3]:=0 else
         If (round(p^[3] * ( 1 + r/100))>255) then p^[3]:=255
         else p^[3]:= round(p^[3] * ( 1 + r/100));
      Inc(p);
    end;
  end;
end;



procedure TForm1.TrackBar3Change(Sender: TObject);
begin
  Image1.Picture.Bitmap.LoadFromFile('C:\Bild.bmp');
  Tone(Image1.Picture.Bitmap,TrackBar1.Position,TrackBar2.Position,
  TrackBar3.Position);
  Image1.Refresh;
end;





procedure TForm1.Button1Click(Sender: TObject);
begin
  ColorDialog1.Execute;
  Image1.Canvas.Brush.Color:= ColorDialog1.Color;

end;



procedure TForm1.TrackBar1Change(Sender: TObject);
begin
  Image1.Picture.Bitmap.LoadFromFile('C:\Bild.bmp');
  Tone(Image1.Picture.Bitmap,TrackBar1.Position,TrackBar2.Position,
  TrackBar3.Position);
  Image1.Refresh;
end;


end.


Hier das ist der komplette source code des Programms.
Man soll praktisch auf den gitter netzt mit farben arbeiten können, das heißt also einzelene Zellen Färben und dann später halt entscheiden können ob es 16x16 oder 32x32 wird und man sollte Icons laden können und bearbeiten,aber bin grad ziemlich ratlos!!

Moderiert von user profile iconGausi: Quote- durch Delphi-Tags ersetzt
Einloggen, um Attachments anzusehen!
Martin1966
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1068

Win 2000, Win XP
Delphi 7, Delphi 2005
BeitragVerfasst: Di 29.11.05 10:29 
Kann es sein das du den Programmcode für die Methoden ClearImage und Gitteranzeigen vertauscht hast? So wie es aussieht zeichnet die Methode ClearImage das Gitternetz und die Methode Gitteranzeigen löscht das Image. ?!?!

Lg Martin

_________________
Ein Nutzer der Ecke ;-)
Basti-1988 Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Di 29.11.05 10:38 
Ja da hast du recht das behebe ich nachher,aber das eigentlich Problem besteht wie vorhin im Zeichnen auf den einzelnen Kästchen da!Mit der Farbpaltte........
Martin1966
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1068

Win 2000, Win XP
Delphi 7, Delphi 2005
BeitragVerfasst: Di 29.11.05 10:41 
user profile iconBasti-1988 hat folgendes geschrieben:
Ja da hast du recht das behebe ich nachher,aber das eigentlich Problem besteht wie vorhin im Zeichnen auf den einzelnen Kästchen da!

Aber solche Fehler helfen einem nicht unbedingt das eigentliche Problem, in einem fremden und nicht dokumentierten Sourcecode, zu finden. ;-)

Wofür ist die Funktion Tone?

In der Methode Image1MouseDown steht nichts drin. Hast du da nichts ausprobiert?

Lg Martin

_________________
Ein Nutzer der Ecke ;-)