Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.03.02;
Скачать: CL | DM;

Вниз

TbitMap и function   Найти похожие ветки 

 
batya-x   (2008-02-03 21:22) [0]

следующий код работает, но черный квадрад рисуеться на обоих картинках, обьясните почему, и как этого избежать (отправив в функцию изображение не меняя его оригенал)

function draver(img: TBitmap):TBitmap;
begin
result:=img;
result.Canvas.Brush.Color:=clBlack;
result.Canvas.Pen.Color:=clBlack;
result.Canvas.Rectangle(30, 30, 50, 50);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
bmp: TBitMap;
begin
if OpenDialog1.Execute then
 begin
  bmp:=TBitMap.Create;
  bmp.LoadFromFile(opendialog1.FileName);
  Image1.Canvas.Draw(0,0,draver(bmp));
  Image2.Canvas.Draw(0,0,bmp);
 end;
end;


ведь если написать так передаваемый параметр остаеться неизменимым

function plus(i:integer):integer ;
begin
 result:=i+10;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
x: integer;
begin
x:=10;
Caption:="до "+floattostr(x)+" / после "+floattostr(plus(x))
end;


 
batya-x   (2008-02-03 21:24) [1]

точнее
//Caption:="до "+floattostr(plus(x))+" / после "+floattostr((x))


 
{RASkov} ©   (2008-02-03 21:53) [2]

> [0] batya-x   (03.02.08 21:22)
> следующий код работает, но черный квадрад рисуеться на обоих
> картинках, обьясните почему, и как этого избежать (отправив
> в функцию изображение не меняя его оригенал)

Потому что твоя функция совсем ничего нового не делает...
т.е. можешь изменить вот это:
function draver(img: TBitmap):TBitmap;
на это:
procedure draver(img: TBitmap);
Будет тоже самое... result внутри замени на img т.е. первая строка (img:=img;) получается не нужна...

> ведь если написать так передаваемый параметр остаеться неизменимым
>
> function plus(i:integer):integer ;

А ты не ровняй все под одну гребенку..... найди отличия TObject и Integer.... ищи в хэлпе...
Или ты хочешь здесь пройти курс обучения делфи?


 
Григорьев Антон ©   (2008-02-03 22:24) [3]

Эх, лень второй раз за день писать про то, что классовые переменные - это указатели... Почитайте http://www.delphikingdom.com/asp/answer.asp?IDAnswer=59093 - там на самом деле ошибка та же, что и у вас, хотя на первый взгляд ситуации выглядят совершенно разными.


 
Amoeba ©   (2008-02-03 23:16) [4]


> procedure TForm1.Button1Click(Sender: TObject);
> var
> bmp: TBitMap;
> begin
> if OpenDialog1.Execute then
>  begin
>   bmp:=TBitMap.Create;
>   bmp.LoadFromFile(opendialog1.FileName);
>   Image1.Canvas.Draw(0,0,draver(bmp));
>   Image2.Canvas.Draw(0,0,bmp);
>  end;
> end;

А здесь, помимо всего прочего, еще и утечка памяти будет. Уничтожать объект bmp должен Пушкин?


 
batya-x   (2008-02-03 23:54) [5]


> Уничтожать объект bmp должен Пушкин?

извените забыл.

так как же сделать.
Можно будет создать новый TBitMap и скопировать туда преждние bmp и отправлять в функцию уже новый TBitMap?
и как правильно скопировать?


 
{RASkov} ©   (2008-02-04 02:04) [6]

> [5] batya-x   (03.02.08 23:54)

Да чтож тебе нужно-то? непонятно :(

>  Image1.Canvas.Draw(0,0,draver(bmp));
>  Image2.Canvas.Draw(0,0,bmp);

В твоем случае и bmp-то вообще походу не нужно..... так как у TImage"сов есть уже и свои битмапы
Посмотри например на TImage.GetCanvas ...


 
{RASkov} ©   (2008-02-04 02:20) [7]

> и как этого избежать (отправив в функцию изображение не меняя его оригенал)

Можно вот так например:

function draver(img: TBitmap): TBitmap; //Что такое draver? :)Ладно, фик с ним...
begin
 result:=TBitmap.Create;
 Result.Assign(img);
 result.Canvas.Brush.Color:=clBlack;
 result.Canvas.Pen.Color:=clBlack;
 result.Canvas.Rectangle(30, 30, 50, 50);
end;
..........
var OrigBmp, NewBmp: TBitmap;
begin
 OrigBmp:=TBitMap.Create;
 OrigBmp.LoadFromFile(opendialog1.FileName);
 NewBmp:=draver(OrigBmp);
 {Image1.}Canvas.Draw(0, 0, OrigBmp);
 {Image2.}Canvas.Draw(0, OrigBmp.Height, NewBmp);
 OrigBmp.Free;
 NewBmp.Free;
end;


при выборе "не правильного" файла в opendialog1.FileName что будет? утечка, ...исправь код чтоб этого не было)



Страницы: 1 вся ветка

Текущий архив: 2008.03.02;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.022 c
2-1202037033
kas86
2008-02-03 14:10
2008.03.02
Считать определенный текст из файла


2-1202146357
Санек
2008-02-04 20:32
2008.03.02
popupmenu выбор итема


6-1181650538
dzr_gregory
2007-06-12 16:15
2008.03.02
Проблема с IdMappedPortTCP


2-1202227203
NiGGa
2008-02-05 19:00
2008.03.02
Ошибка Delphi при запуске своего приложения


3-1192541492
dest81
2007-10-16 17:31
2008.03.02
Ehlib, IBDataset и сортировка