Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2012, 22:14   #1
Programmist26
 
Регистрация: 31.07.2011
Сообщений: 9
По умолчанию разбить картинку на пикселы

у меня есть программа которая собирает картинку по пикселам нужно сделать наоборот чтобы картинка разбивалась на пикселы. вот картинки
Изображения
Тип файла: jpg Безымянный.jpg (104.1 Кб, 170 просмотров)
Тип файла: jpg Безымянный1.jpg (97.3 Кб, 90 просмотров)
Тип файла: jpg Безымянный12.jpg (49.7 Кб, 110 просмотров)
Тип файла: jpg Безымянный122.jpg (32.5 Кб, 98 просмотров)
Тип файла: jpg Безымянный1222.jpg (18.7 Кб, 113 просмотров)
Programmist26 вне форума Ответить с цитированием
Старый 24.10.2012, 22:15   #2
Programmist26
 
Регистрация: 31.07.2011
Сообщений: 9
По умолчанию

Код:
unit Unit2;

interface

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

type
point=record
  color:tcolor;
  x,y:integer;
end;
type pointarray=array of array of point;
  TForm2 = class(TForm)
    Background: TImage;
    Timer1: TTimer;
    Backscreen: TImage;
    Screen: TImage;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var

pa:pointarray;
step:integer;
x0,y0:integer;
Form2: TForm2;

const maxstep=100;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
var
i,j:integer;
begin
   randomize;
   setlength(pa,background.Width,background.Height);
   for i := 1 to background.width - 1 do
   for j := 1 to background.height - 1 do
     begin
       pa[i,j].color:=background.canvas.pixels[i,j];
       pa[i,j].x:=random(screen.width);
       pa[i,j].y:=random(screen.height);
     end;
     x0:=(screen.width-background.width)div 2;
     y0:=(screen.height-background.height)div 2;
     step:=0;
     timer1.interval:=1;
     timer1.enabled:=true;
end;

procedure TForm2.Button2Click(Sender: TObject);
var
i,j:integer;
begin
   randomize;
   setlength(pa,background.Width,background.Height);
end;

procedure TForm2.Timer1Timer(Sender: TObject);
var
i,j:integer;
xst,yst:integer;
begin
 backscreen.Canvas.Brush.Color:=clbtnface;
 backscreen.Canvas.FillRect(rect(0,0,backscreen.Width,backscreen.Height));
 for i:=  1 to background.width - 1 do
   for j := 1 to background.Height - 1 do
   begin
     xst:=round(pa[i,j].x-step*(pa[i,j].x-(x0+i))/maxstep);
     yst:=round(pa[i,j].y-step*(pa[i,j].y-(y0+j))/maxstep);
     backscreen.Canvas.Pixels[xst,yst]:=pa[i,j].Color;
   end;
   screen.canvas.copyrect(rect(0,0,screen.width,screen.height),backscreen.canvas,
   rect(0,0,screen.width,screen.height));
   step:=step+1;
   if step>maxstep  then timer1.enabled:=false;

end;

end.
Programmist26 вне форума Ответить с цитированием
Старый 25.10.2012, 01:02   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Код:
procedure TForm1.Button2Click(Sender: TObject);
var
  i, j: integer;
begin
  randomize;
  setlength(pa, Background.Width, Background.Height);
  for i := 1 to Background.Width - 1 do
    for j := 1 to Background.Height - 1 do
    begin
      pa[i, j].color := Background.canvas.pixels[i, j];
      pa[i, j].x := random(Screen.Width) - Screen.Width div 2;
      pa[i, j].y := random(Screen.Height) - Screen.Height div 2;
    end;
  x0 := (Screen.Width - Background.Width) div 2;
  y0 := (Screen.Height - Background.Height) div 2;
  step := 0;
  Timer2.interval := 1;
  Timer2.enabled := true;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
var
  i, j: integer;
  xst, yst: integer;
begin
  Backscreen.canvas.Brush.color := clbtnface;
  Backscreen.canvas.FillRect(rect(0, 0, Backscreen.Width, Backscreen.Height));
  for i := 1 to Background.Width - 1 do
    for j := 1 to Background.Height - 1 do
    begin
      xst := round(i + x0 + step * pa[i, j].x / maxstep);
      yst := round(j + y0 + step * pa[i, j].y / maxstep);
      Backscreen.canvas.pixels[xst, yst] := pa[i, j].color;
    end;
  Screen.canvas.copyrect(rect(0, 0, Screen.Width, Screen.Height),
    Backscreen.canvas, rect(0, 0, Screen.Width, Screen.Height));
  step := step + 1;
  if step > maxstep then
    Timer2.enabled := false;
end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 25.10.2012, 20:02   #4
Programmist26
 
Регистрация: 31.07.2011
Сообщений: 9
По умолчанию

не работает
Programmist26 вне форума Ответить с цитированием
Старый 25.10.2012, 20:41   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

И что же не работает?
Чаще всего я не предлагаю непроверенного кода.
Вложения
Тип файла: zip image_transform.zip (550.5 Кб, 52 просмотров)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 07.01.2016, 15:34   #6
Сослан
Новичок
Джуниор
 
Регистрация: 07.01.2016
Сообщений: 1
Хорошо

Цитата:
Сообщение от BDA Посмотреть сообщение
И что же не работает?
Чаще всего я не предлагаю непроверенного кода.
Классно, спасибо!!
Сослан вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Накладывать картинку на картинку любой формы back191 HTML и CSS 0 25.08.2012 19:36
Разбить строку redenemy Общие вопросы C/C++ 1 29.05.2012 01:06
разбить сообщение stupid C# (си шарп) 4 29.03.2011 09:51
Как получить картинку при наведении на другую картинку (ссылку) seeker1 JavaScript, Ajax 8 04.07.2010 19:42
Как разбить число на цифрыКак разбить число на цифры: 3241 => 3,2,4,1 (Pascal) Banderas123 Помощь студентам 3 07.12.2009 18:26