Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1201971424
Lamer666
2008-02-02 19:57
2008.03.02
TreeView ImageList


2-1202571499
Петр
2008-02-09 18:38
2008.03.02
memorystream to string


2-1202065033
San1712
2008-02-03 21:57
2008.03.02
Как узнать начальный и последний адрес программы в памяти ?


2-1202234029
Stenfit
2008-02-05 20:53
2008.03.02
Советы по оптимизации


15-1201366691
ZoldBerger
2008-01-26 19:58
2008.03.02
Исходники Delphi Decompiler а





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский