Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 15.12.2009, 08:14
Ooops Ooops вне форума
Прохожий
 
Регистрация: 11.12.2009
Сообщения: 9
Репутация: 10
По умолчанию Рисовать попиксельно

Какая профедура или функция рисования попиксельно в моем варианте это иконки как мне сделать чтобы они рисовались попиксельно !
Ответить с цитированием
  #2  
Старый 15.12.2009, 08:42
Ooops Ooops вне форума
Прохожий
 
Регистрация: 11.12.2009
Сообщения: 9
Репутация: 10
По умолчанию

Код:
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
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, Buttons, Menus, StdCtrls, ExtDlgs;
 
type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    N8: TMenuItem;
    Panel1: TPanel;
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    SpeedButton3: TSpeedButton;
    SpeedButton4: TSpeedButton;
    SpeedButton5: TSpeedButton;
    ScrollBox1: TScrollBox;
    Image1: TImage;
    ColorBox1: TColorBox;
    ColorBox2: TColorBox;
    Label1: TLabel;
    Label2: TLabel;
 
    OpenPictureDialog1: TOpenPictureDialog;
    SavePictureDialog1: TSavePictureDialog;
    procedure button1click(sender: tobject);
    procedure formcreate(sender: tobject);
 
    procedure N5Click(Sender: TObject);
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure N2Click(Sender: TObject);
    procedure N3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  TShape = (sPen, sRect, sEllipse, sPoly, sFill);
var
  Form1: TForm1;
  img, buffer: TBitmap;
  x0,y0: integer;
  nowdrawing: TShape;
  dwn: boolean;
  FileName : string;
  implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  Img:=TBitmap.Create;
 buffer:=TBitmap.Create;
 img.Width:=Image1.ClientWidth;
 buffer.Width:=Image1.ClientWidth;
 img.Height:=Image1.ClientHeight;
 buffer.Height:=Image1.ClientHeight;
 nowdrawing:=sPen;
 dwn:=false;
end;
 
procedure TForm1.N5Click(Sender: TObject);
begin
  Close;
end;
 
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if button=mbLeft then begin
 img.assign(buffer);
 x0:=x; y0:=y;
 if SpeedButton1.Down then
 begin
 nowdrawing:=sPen;
 img.canvas.MoveTo(x,y);
 end else
 if SpeedButton2.Down then
 nowdrawing:=sEllipse else
 if SpeedButton3.Down then
 nowdrawing:=sRect else
 if SpeedButton4.Down then
 nowdrawing:=sPoly else
 if SpeedButton5.Down then
 nowdrawing:=sFill;
 dwn:=true;
 img.Canvas.Pen.Color:=ColorBox1.Selected;
 img.Canvas.Brush.Color:=ColorBox2.Selected;
 
 if nowdrawing=sFill then
 begin
 img.Canvas.FloodFill(x0,y0,img.Canvas.Pixels[x,y],fsSurface);
 buffer.Assign(img);
 dwn:=false;
 end
 end else
 begin
 if (dwn)and(nowdrawing=sPoly) then begin
 x0:=x;
 y0:=y;
 buffer.Assign(img);
 end;
 end;
 
 Image1.Canvas.CopyRect(bounds(0,0,img.Width,img.Height),
                    img.Canvas,bounds(0,0,img.Width,img.Height));
 
end;
 
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
if not dwn then exit;
 img.assign(buffer);
 case nowdrawing of
 sPen:begin
 img.Canvas.LineTo(x,y);
 buffer.Assign(img);
 end;
 sRect:begin
 img.Canvas.Rectangle(x0,y0,x,y);
 end;
 sEllipse:begin
 img.Canvas.Ellipse(x0,y0,x,y);
 end;
 sPoly:begin
 img.Canvas.MoveTo(x0,y0);
 img.Canvas.LineTo(x,y);
 end;
 sFill:begin
 //nothing.
 end;
 end;
 
 Image1.Canvas.CopyRect(bounds(0,0,img.Width,img.Height),
                    img.Canvas,bounds(0,0,img.Width,img.Height));
end;
 
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if button=mbLeft then dwn:=false;
 buffer.Assign(img);
end;
 
procedure TForm1.N2Click(Sender: TObject);
begin
  If OpenPictureDialog1.Execute then begin
  Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
end;
 end;
procedure TForm1.N3Click(Sender: TObject);
begin
  SavePictureDialog1.Execute;
  Image1.Picture.SaveToFile(SavePictureDialog1.FileName+'.ico');
end;
 
end.
Admin: Пользуемся тегами!!! При рецедиве - бан!

Последний раз редактировалось Admin, 15.12.2009 в 10:18.
Ответить с цитированием
  #3  
Старый 15.12.2009, 08:43
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

Используя свойство Pixels, можно задать требуемый цвет для любой точки графической поверхности, т. е. "нарисовать" точку. Например, инструкция
Код:
1
Form1.Canvas.Pixels[10,10]:=clRed
окрашивает точку поверхности 10, 10 формы в красный цвет.
__________________
В начале был Бит, потом Байт и только потом появилось Слово...
Ответить с цитированием
  #4  
Старый 15.12.2009, 08:53
Ooops Ooops вне форума
Прохожий
 
Регистрация: 11.12.2009
Сообщения: 9
Репутация: 10
По умолчанию

Можно по подробней , я просто непонял с этими пикселями ! Напиши по понятней (по простому, без терменов) пожалуйста! А то мне надо сегдня уже сдавать эту работу а осталось что бы иконка рисовалась оп пикселям ! Я сделал в программе этой разрешения 32х32 и у меня просто маленькая картинка а в ней нарисовать неполучится слишком мала , а если ставлю разрешения больше то она и сохраняется в большем , а мне для иконки надо маленькое разрешения ! Помоги плз!
Ответить с цитированием
  #5  
Старый 15.12.2009, 09:39
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

Твоя иконка это некоторый массив [0..31, 0..31]...
Код:
1
Form1.Image1.Canvas.Pixels[10,10]:=clRed
Рисует красную точку на Image по координатам 10, 10...
Т.е. ты можешь заполнить двумерный массив точками разных цветов...
Ты хочешь рисовать ее сам, на большой форме с сохранением ее в маленькой??? Небольшой код может будет посказкой...
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure TForm1.MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: integer);
var
  X1, Y1: integer;
  a: TRect;
begin
//Вычисляем координаты начала квадрата на форме, т.е. точки на иконке
  X1 := X div 10 + 1;
  Y1 := Y div 10 + 1;
//Рисуем на Image
  Form1.Image1.Canvas.Pixels[X1,Y1]:=clRed;
//Вычисляем координаты квадрата 
  a.Left := (X1 - 1) * 10 + 1;
  a.Top := (Y1 - 1) * 10 + 1;
  a.Right := X1 * 10;
  a.Bottom := Y1 * 10;
//Рисуем квадрат на форме, на иконке это точка
  Canvas.Brush.Color := clRed;
  Canvas.Brush.Style := bsSolid;
  Canvas.FillRect(a);
end;
X и Y это в данном случае
Код:
1
Form1.Image1.Canvas.Pixels[X,Y]:=clRed
Нужно только поработать с цветами, т.е. не только красный...
Для того чтобы стереть точку, нарисуй другую там же, но белым цветом например...
__________________
В начале был Бит, потом Байт и только потом появилось Слово...

Последний раз редактировалось NIch, 15.12.2009 в 09:56.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:56.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025