|
|
Регистрация | << Правила форума >> | 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. |