Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.04.15;
Скачать: [xml.tar.bz2];

Вниз

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

 
>>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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.037 c
2-1174562221
tery
2007-03-22 14:17
2007.04.15
Удаления записи в столбце


2-1175005391
Longli
2007-03-27 18:23
2007.04.15
Масштабирование


2-1174974898
Neket
2007-03-27 09:54
2007.04.15
Небольшой вопрос по БД


2-1174933475
Гость3000
2007-03-26 22:24
2007.04.15
Эксель грузиться на свой лад


2-1174478157
Игорь 2222
2007-03-21 14:55
2007.04.15
операции с числом





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский