Форум по 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
По умолчанию

Код:
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, можно задать требуемый цвет для любой точки графической поверхности, т. е. "нарисовать" точку. Например, инструкция
Код:
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]...
Код:
Form1.Image1.Canvas.Pixels[10,10]:=clRed
Рисует красную точку на Image по координатам 10, 10...
Т.е. ты можешь заполнить двумерный массив точками разных цветов...
Ты хочешь рисовать ее сам, на большой форме с сохранением ее в маленькой??? Небольшой код может будет посказкой...
Код:
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 это в данном случае
Код:
Form1.Image1.Canvas.Pixels[X,Y]:=clRed
Нужно только поработать с цветами, т.е. не только красный...
Для того чтобы стереть точку, нарисуй другую там же, но белым цветом например...
__________________
В начале был Бит, потом Байт и только потом появилось Слово...

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


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter