Форум: "Начинающим";
Текущий архив: 2008.03.02;
Скачать: [xml.tar.bz2];
Вниз
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.045 c