![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Какая профедура или функция рисования попиксельно в моем варианте это иконки как мне сделать чтобы они рисовались попиксельно !
|
|
#2
|
|||
|
|||
|
Код:
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, 15.12.2009 в 10:18. |
|
#3
|
||||
|
||||
|
Используя свойство Pixels, можно задать требуемый цвет для любой точки графической поверхности, т. е. "нарисовать" точку. Например, инструкция
Код:
Form1.Canvas.Pixels[10,10]:=clRed |
|
#4
|
|||
|
|||
|
Можно по подробней , я просто непонял с этими пикселями ! Напиши по понятней (по простому, без терменов) пожалуйста! А то мне надо сегдня уже сдавать эту работу а осталось что бы иконка рисовалась оп пикселям ! Я сделал в программе этой разрешения 32х32 и у меня просто маленькая картинка а в ней нарисовать неполучится слишком мала , а если ставлю разрешения больше то она и сохраняется в большем , а мне для иконки надо маленькое разрешения ! Помоги плз!
|
|
#5
|
||||
|
||||
|
Твоя иконка это некоторый массив [0..31, 0..31]...
Код:
Form1.Image1.Canvas.Pixels[10,10]:=clRed Т.е. ты можешь заполнить двумерный массив точками разных цветов... Ты хочешь рисовать ее сам, на большой форме с сохранением ее в маленькой??? Небольшой код может будет посказкой... Код:
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; Код:
Form1.Image1.Canvas.Pixels[X,Y]:=clRed Для того чтобы стереть точку, нарисуй другую там же, но белым цветом например... Последний раз редактировалось NIch, 15.12.2009 в 09:56. |