![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Image [D7, XP]
Надуев Алексей © (2007-09-06 22:44:00)Как можно быстро заполнить image (например случайными цветными пикселями) через Image.canvas.pixels.
homm (2007-09-07 14:47:00) [1]> [25] {RASkov} © (07.09.07 14:35)
> Тем более автор конкретно указал - "через Image.canvas.pixels"
> А ему тут сканлайн "впаривают" :))
Вот я и говорю, что ты ветку не читаешь :) [1], [2].
{RASkov} (2007-09-07 14:35:00) [2]> [23] homm © (07.09.07 14:08)
Тем более автор конкретно указал - " черезImage.canvas.pixels"
А ему тут сканлайн "впаривают" :))
Если автор заглянет, то это ему:
Лучше используй пример со сканлайном, он быстрее, а мой - так для изучения :)
{RASkov} (2007-09-07 14:15:00) [3]> [23] homm © (07.09.07 14:08)
> А человек что попросил? Ты тему зачем открываешь, если отвечаешь неглядя
Ну вообще-то есть разница когда мы один большой битмап по пиксельно "красим" и когда маленький и им большой...
> Вообщето даже в вопросе уже написано, что автор с предложеным
> тобой способом знаком.
:)
Был бы знаком, то не было-бы [10] :о)
homm (2007-09-07 14:08:00) [4]> [22] {RASkov} © (07.09.07 13:57)
> Я человеку начальный путь только предложил.... и то на выбор.
А человек что попросил? Ты тему зачем открываешь, если отвечаешь неглядя. Вообщето даже в вопросе уже написано, что автор с предложеным тобой способом знаком.
{RASkov} (2007-09-07 13:57:00) [5]> [21] homm © (07.09.07 06:18)
Стыдно... не стыдно....
Я человеку начальный путь только предложил.... и то на выбор.
Да, мой способ медленнее раз в 20... но я и не говорил, что он быстрый...
и "закраска" идет не всего битмапа случайно, а фрагмента, а этим фрагментом весь - вот это не сказал, говорю.
Не наезжай не обаснованно...
Хотя.... ладно. Просто когда я писал [7], [4] - не было еще.... и перед отправкой я видел, что появились посты и соответственно [4]
Но всеж отправил пост. Впрпочем зря.
homm (2007-09-07 06:18:00) [6]> [14] {RASkov} © (06.09.07 23:28)
Зачем ты дерьмо вское постишь, теебе не стыдно человека в заблуждение вводить?
{RASkov} (2007-09-07 00:20:00) [7]> [16] DVM © (06.09.07 23:34)
> {RASkov} © (06.09.07 23:28) [14]
> много лишних телодвижений
Кстати... пример [17] тоже можно немного упростить и даже чуточку ускорить
:)
procedure TForm1.Button2Click(Sender: TObject);
begin
Randomize;
Image1.Picture.Bitmap.Width := Image1.Width;
Image1.Picture.Bitmap.Height := Image1.Height;
Image1.Picture.Bitmap.PixelFormat := pf24bit;
ProcessBitmap(Image1.Picture.Bitmap);
end;
ProcessBitmap - тот же самый, за исключением var параметра Bmp, его нужно просто указателем
т.е.procedure ProcessBitmap(Bmp: TBitmap);И проверочку бы туда не мешало-бы на валидность Bmp,
также ...впрочем.... необязательно было переопределять типы:
type
PByteArray = ^TByteArray;
TByteArray = array[0..32767] of Byte;
в D7 они именно так и объявлены... в SysUtils...
ну это уже придирки :)
{RASkov} (2007-09-06 23:41:00) [8]> но это уже быстро, впрочем
но это уже НЕбыстро, впрочем :) Сорри...
{RASkov} (2007-09-06 23:40:00) [9]> [16] DVM © (06.09.07 23:34)
Конфа для начинающих.... пусть хоть со стандартными объектами разберется :)
> [15] Надуев Алексей © (06.09.07 23:32)
Да, два. Зачем тебе первый? Первый это для "закраски" второго.....
Впрочем по аналогии с первым можно закрасить сразу второй таким образом, но это уже быстро, впрочем тебе может и устроит....
Тебеж всеравно для учебы, верно? Вот и учись потихоньку.... :) Потом можно и СканЛайн изучить...
DVM (2007-09-06 23:37:00) [10]
> Надуев Алексей ©
Кладем на форму TButton и TImage. Пишем код.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure ProcessBitmap(var Bmp: TBitmap);
type
PByteArray = ^TByteArray;
TByteArray = array[0..32767] of Byte;
var
pb: pbytearray;
x, y: Integer;
begin
for y:=0 to bmp.Height-1 do
begin
pb := bmp.scanline[y];
for x:=0 to bmp.Width - 1 do
begin
pb[x*3]:=Random(255);
pb[x*3+1]:=Random(255);
pb[x*3+2]:=Random(255);
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
BMP: TBitmap;
begin
Randomize;
BMP:=TBitmap.Create;
try
BMP.Width := Image1.Width;
BMP.Height := Image1.Height;
BMP.PixelFormat := pf24bit;
ProcessBitmap(BMP);
Image1.Picture.Bitmap.Assign(BMP);
finally
BMP.Free;
end
end;
end.
Вуаля.
Сидим, думаем и читаем книжки.
DVM (2007-09-06 23:34:00) [11]
> {RASkov} © (06.09.07 23:28) [14]
много лишних телодвижений
Надуев Алексей (2007-09-06 23:32:00) [12]Здесь получается два битмапа? один 50*50 второй 250*250, а как сдалать что бы первый битмап сразу отобразился и где его координаты?
{RASkov} (2007-09-06 23:28:00) [13]> Надуев Алексей
из анкеты:
>Изучаю Turbo Pascal, Delphi, HTTP и еще кучу всякого добра.
Попробуй что-нибудь одно :)
Вот тебе "копипаст", только что проверил.... работает :)
procedure TForm1.Button1Click(Sender: TObject);
var B, Pic: TBitmap; R, C: Integer;
begin
Randomize;
B:=TBitmap.Create;
B.Width:=50; B.Height:=50;
for C:=0 to B.Width do
for R:=0 to B.Height do B.Canvas.Pixels[C, R]:=RGB(Random(255), Random(255), Random(255));
Pic:=TBitmap.Create;
Pic.Width:=250;
Pic.Height:=250;
Pic.Canvas.Brush.Bitmap:=TBitmap.Create;
Pic.Canvas.Brush.Bitmap.Assign(B);
Pic.Canvas.FillRect(Pic.Canvas.ClipRect);
Canvas.Draw(0, 0, Pic);
B.Free;
Pic.Free;
end;
{RASkov} (2007-09-06 23:24:00) [14]> [9] Надуев Алексей © (06.09.07 23:14)
> Что должно быть в параметрах?
>
> procedure ProcessBitmap(var Bmp: TBitmap);
Дык там же указаны параметры.... нда...
Передавай заранее созданный битмап в данную процедуру... там он и "покраситься случайно"... наверное :)
> [10] Надуев Алексей © (06.09.07 23:20)
> тут ошибку выдает---
> for R:=0 to B.Height do B.Canvas.Pixel[C, R]:=RGB(Random(255), Random(255), Random(255));
Ну я ошибся, а ты вообще походу не знаком с языком, на котором пытаешься писать...
>замени на Pixels
Anatoly Podgoretsky (2007-09-06 23:22:00) [15]> Надуев Алексей (06.09.2007 23:20:10) [10]
Нет такого свойства, во поэтому и говорит, что не знает.
DVM (2007-09-06 23:22:00) [16]
> Надуев Алексей © (06.09.07 23:14) [9]
> Что должно быть в параметрах?
procedure TForm1.Button1Click(Sender: TObject);
var
BMP: TBitmap;
begin
BMP:=TBitmap.Create;
try
BMP.Width := 100;
BMP.Height := 100;
BMP.PixelFormat := pf24bit;
ProcessBitmap(BMP);
Image1.Picture.Bitmap.Assign(BMP);
finally
BMP.Free;
end
end;
Надуев Алексей (2007-09-06 23:20:00) [17]Ничего не понимаю
var
B, Pic: TBitmap;
R, C: Integer;
begin
B:=TBitmap.Create;
B.Width:=25; B.Height:=25;
for C:=0 to B.Width do
тут ошибку выдает---
for R:=0 to B.Height do B.Canvas. Pixel[C, R]:=RGB(Random(255), Random(255), Random(255));
[Error] Unit1.pas(59): Undeclared identifier: 'Pixel'
Pic:=TBitmap.Create;
Pic.Width:=250;
Pic.Height:=250;
Pic.Canvas.Brush.Bitmap:=TBitmap.Create;
Pic.Canvas.Brush.Bitmap.Assign(B);
Pic.Canvas.FillRect(Pic.Canvas.ClipRect);
Canvas.Draw(0, 0, Pic);
B.Free;
Pic.Free;
end;
Надуев Алексей (2007-09-06 23:14:00) [18]Что должно быть в параметрах?
procedure ProcessBitmap(var Bmp: TBitmap);
DVM (2007-09-06 23:10:00) [19]
> Как пользоваться CreateBitmap?
Забудь. Рано тебе еще.
{RASkov} (2007-09-06 23:09:00) [20]
var B, Pic: TBitmap; R, C: Integer;
begin
B:=TBitmap.Create;
B.Width:=25; B.Height:=25;
for C:=0 to B.Width do
for R:=0 to B.Height do B.Canvas.Pixel[C, R]:=RGB(Random(255), Random(255), Random(255));
Pic:=TBitmap.Create;
Pic.Width:=250;
Pic.Height:=250;
Pic.Canvas.Brush.Bitmap:=TBitmap.Create;
Pic.Canvas.Brush.Bitmap.Assign(B);
Pic.Canvas.FillRect(Pic.Canvas.ClipRect);
Canvas.Draw(0, 0, Pic);
B.Free;
Pic.Free;
end;
Это не ответ на вопрос, но попробуй как вариант для начала....