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

Вниз

помогите исправить ошибку   Найти похожие ветки 

 
>>DEATH<<   (2007-03-27 05:45) [0]

значит написал небольшую функцию(для шифровки изображений,,впрочем эт не важно)..все работает нормально..как только я нажимаю кнопку на которой стоит выполнение этой функции приложение выдает такое окошко http://slil.ru/24141072

вот сама функция:
function codeimage(image:tbitmap):string;
var
 x, y, r, g, b:byte;
 temp:timage;
 res:string;
begin
temp.Picture.Bitmap:=image;
if temp.Width>256 then temp.Width:=256;
if temp.Height>256 then temp.Height:=256;
res:=inttohex(temp.Width,2)+inttohex(temp.Height,2);
for y:=0 to temp.Height-1 do
for x:=0 to  temp.Width-1 do begin
r:=GetRValue(ColorToRGB(temp.Canvas.Pixels[x,y]));
g:=GetGValue(ColorToRGB(temp.Canvas.Pixels[x,y]));
b:=GetBValue(ColorToRGB(temp.Canvas.Pixels[x,y]));
res:=res+inttohex(r,2)+inttohex(g,2)+inttohex(b,2);
end;
result:=res;
end;


кто знает скажите что не так


 
Джо ©   (2007-03-27 06:28) [1]

> temp.Picture.Bitmap:=image;

Кто будет создавать объекты перед их использованием?
И вообще непонятно, зачем тут этот TImage.


 
>>DEATH<<   (2007-03-28 07:10) [2]


>
> Кто будет создавать объекты перед их использованием?
>

а как создать объект(учу delphi сам без учебников на примерах так что посмотреть негде) ткните носом что где написать..заранее спасибо)))


 
Loginov Dmitry ©   (2007-03-28 07:47) [3]

> учу delphi сам без учебников на примерах


В крайнем случае хэлп-то должен у тебя присутствовать. Вот и почитай там про объектную модель Delphi.


 
bagos   (2007-03-28 07:51) [4]

если не ошибаюсь:
temp:=timage.create(self);


 
Gydvin ©   (2007-03-28 09:07) [5]

А зачем timage? Используйте tbitmap там тоже канва есть и не нужно создавать новый лишняя трата ресурсов, используйте
function codeimage(image:tbitmap):string;

Кроме того


> temp.Picture.Bitmap:=image;

Идеологически неверно имхо

нужно так
temp.Picture.Bitmap.assign(image)


 
>>DEATH<<   (2007-03-28 09:37) [6]


> А зачем timage? Используйте tbitmap там тоже канва есть
> и не нужно создавать новый лишняя трата ресурсов, используйте
> function codeimage(image:tbitmap):string;

сделал так вот только всеравно та же ошибка


 
Gydvin ©   (2007-03-28 10:00) [7]

А где содержание этой кнопки?


 
icWasya ©   (2007-03-28 11:09) [8]

лучше сразу сделай так

temp:tbitmap; // раз
.....
begin
temp:=tbitmap.create;//два
temp.assign(image);

а в конце
temp.free;//три


 
RASkov   (2007-03-28 13:07) [9]

> [0] >>DEATH<<   (27.03.07 05:45)
> function codeimage(image:tbitmap):string;
> var
> x, y, r, g, b:byte;
> temp:timage;
ImW, ImH: Integer;
> res:string;
> begin

Он(temp:timage) по всей видимости тебе вобще здесь не нужен.... Работай напрямую с image:tbitmap переданным поссылке, размеры ему менять ни к чему конечно, лучше так:
if image.Width>256 then ImW:=255 else ImW:=image.Width-1; //тоже и с Height
соответственно циклы будут
for y:=0 to ImH do
for x:=0 to ImW do begin.....


 
Gydvin ©   (2007-03-28 13:28) [10]

ошибка где-то вне этой функции


 
>>DEATH<<   (2007-03-28 13:43) [11]

ну для начала я уже давно перевел с Timage на Tbitmap..то что посоветовал RASkov   мнебольше нравится..


 
RASkov   (2007-03-28 14:20) [12]

Кстати и локальная переменная res тоже ни к чему.... Так как ты делаешь, можно и с Result сразу напрямую.
В итоге вот такой вот скилет:
function CodeImage(image: TBitmap): String;
var r, g, b: Byte;
   x, y, ImW, ImH: Integer;
begin
...
end;


 
>>DEATH<<   (2007-03-28 14:28) [13]


> Кстати и локальная переменная res тоже ни к чему.... Так
> как ты делаешь, можно и с Result сразу напрямую.
> В итоге вот такой вот скилет:
> function CodeImage(image: TBitmap): String;
> var r, g, b: Byte;
>    x, y, ImW, ImH: Integer;
> begin
> ...
> end;
>

а x, y может тоже byte сделать ведь они 0..255


 
RASkov   (2007-03-28 14:47) [14]


> а x, y может тоже byte сделать ведь они 0..255

В конкретном случае разницы нет(более того может с Byte даже и лучше), но желательно использовать переменные "более родных" типов...
Вдруг тебе понадобится не ImW:=255, а больше, ты в коде функции исправишь на это: if image.Width>356 then ImW:=355 else ImW:=image.Width-1;
но забудешь поменять тип у X и Y в описании...
Ошибки синтаксической не будет, но будет логическая и твоя функция работать будет не верно.


 
Loginov Dmitry ©   (2007-03-28 14:57) [15]

> В конкретном случае разницы нет(более того может с Byte
> даже и лучше)


Вообще в качестве счетчика цикла правильнее задавать знаковую переменную. Меньше риска нарваться на грабли.



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

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

Наверх




Память: 0.5 MB
Время: 0.047 c
15-1174543153
FIkus
2007-03-22 08:59
2007.04.15
Вопрос электрикам


2-1174494151
DmitrichJ
2007-03-21 19:22
2007.04.15
Переменные в MDI форме.


15-1174320124
ferr
2007-03-19 19:02
2007.04.15
Монитор.


2-1175111750
Ников
2007-03-28 23:55
2007.04.15
Как написать м в квадрате


2-1174993098
smaller
2007-03-27 14:58
2007.04.15
Как определить существование формы ?