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

Вниз

описание процедур   Найти похожие ветки 

 
PHoeNiX   (2008-06-06 09:26) [0]

Есть раздел описания переменных и процедуры изменения резкости, контрастности, яркости и вращения изображения. Нужно для каждой процедуры алгоритм и принцип работы(хотябы 5-6 предложений на каждую процедуру).Выручайте пожалуйста


var
Form4:TForm4;
OrigBmp:TBitmap;
a,c,e:integer;
RedValue1,GreenValue1,BlueValue1:integer;
flag:boolean;

const
MaxPixelCount=32768;

type
pRGBArray=^TRGBArray;
TRGBArray=ARRAY[0..MaxPixelCount-1]OFTRGBTriple;

procedureRezkost(Bmp:TBitmap;Correction:integer);
type
TRGBArray=array[Word]ofTRGBTriple;
PRGBArray=^TRGBArray;
var
Filter:array[0..8]ofinteger;//matricede3*3pixels
Red,Green,Blue,NewR,NewG,NewB,I,
PosX,PosY,mX,mY,dX,dY,Diviseur:integer;
TabScanlineBmp:arrayofPRGBArray;
TabScanlineFinalBmp:arrayofPRGBArray;
FinalBmp:TBitmap;
begin
forI:=0toHigh(Filter)do
ifIin[0,2,6,8]thenFilter[I]:=-Correction
elseifI=4thenFilter[I]:=(Correction*4)+128//+128permetunecorrectionbienйtalйe
elseFilter[I]:=0;
Diviseur:=Filter[4]-(Correction*4);

FinalBmp:=TBitmap.Create;

try
FinalBmp.Assign(Bmp);
SetLength(TabScanlineBmp,Bmp.Height);
SetLength(TabScanlineFinalBmp,Bmp.Height);
forI:=0toBmp.Height-1do
begin
TabScanlineBmp[I]:=Bmp.Scanline[I];
TabScanlineFinalBmp[I]:=FinalBmp.Scanline[I];
end;

forPosY:=0toBmp.Height-1do
forPosX:=0toBmp.Width-1do
begin
NewR:=0;
NewG:=0;
NewB:=0;
fordY:=-1to1do
fordX:=-1to1do
begin
//positiondupixelаtraiter
mY:=PosY+dY;
mX:=PosX+dX;
//Vйrificationdeslimitespourйviterleseffetsdebord
//LecturedescomposantesRGBdechaquepixel
if(mY>=1)and(mY<=BMP.Height-1)
and(mX>=1)and(mX<=BMP.Width-1)then
begin
Red:=TabScanlineBmp[mY,mX].RGBTRed;
Green:=TabScanlineBmp[mY,mX].RGBTGreen;
Blue:=TabScanlineBmp[mY,mX].RGBTBlue;
end
else
begin
Red:=TabScanlineBmp[PosY,PosX].RGBTRed;
Green:=TabScanlineBmp[PosY,PosX].RGBTGreen;
Blue:=TabScanlineBmp[PosY,PosX].RGBTBlue;
end;

I:=4+(dY*3)+dX;//Ipeutvarierde0а8
NewR:=NewR+Red*Filter[I];
NewG:=NewG+Green*Filter[I];
NewB:=NewB+Blue*Filter[I];
end;

NewR:=NewRdivDiviseur;
NewG:=NewGdivDiviseur;
NewB:=NewBdivDiviseur;
ifNewR>255thenNewR:=255elseifNewR<0thenNewR:=0;
ifNewG>255thenNewG:=255elseifNewG<0thenNewG:=0;
ifNewB>255thenNewB:=255elseifNewB<0thenNewB:=0;
TabScanlineFinalBmp[PosY,PosX].RGBTRed:=NewR;
TabScanlineFinalBmp[PosY,PosX].RGBTGreen:=NewG;
TabScanlineFinalBmp[PosY,PosX].RGBTBlue:=NewB;
end;

Bmp.Assign(FinalBmp);

finally
FinalBmp.Free;
Finalize(TabScanlineBmp);
Finalize(TabScanlineFinalBmp);
end;
end;

procedureContrast(Bitmap:TBitmap;Value:Integer;Local:Boolean);

functionBLimit(B:Integer):Byte;
begin
ifB<0then
Result:=0
elseifB>255then
Result:=255
else
Result:=B;
end;

var
Dest:pRGBTriple;
x,y,mr,mg,mb,
W,H,tr,tg,tb:Integer;
vd:Double;

begin
ifValue=0then
Exit;
W:=Bitmap.Width-1;
H:=Bitmap.Height-1;
ifLocalthen
begin
mR:=128;
mG:=128;
mB:=128;
end
else
begin
tr:=0;
tg:=0;
tb:=0;
fory:=0toHdo
begin
Dest:=Bitmap.ScanLine[y];
forx:=0toWdo
begin
withDest^do
begin
Inc(tb,rgbtBlue);
Inc(tg,rgbtGreen);
Inc(tr,rgbtRed);
end;
Inc(Dest);
end;
end;
mB:=Trunc(tb/(W*H));
mG:=Trunc(tg/(W*H));
mR:=Trunc(tr/(W*H));
end;
ifValue>0then
vd:=1+(Value/10)
else
vd:=1-(Sqrt(-Value)/10);
fory:=0toHdo
begin
Dest:=Bitmap.ScanLine[y];
forx:=0toWdo
begin
withDest^do
begin
rgbtBlue:=BLimit(mB+Trunc((rgbtBlue-mB)*vd));
rgbtGreen:=BLimit(mG+Trunc((rgbtGreen-mG)*vd));
rgbtRed:=BLimit(mR+Trunc((rgbtRed-mR)*vd));
end;
Inc(Dest);
end;
end;
form3.Image1.Refresh;
end;

procedureTForm4.TrackBar_BrightnessChange(Sender:TObject);
vari,j,RedValue2,GreenValue2,BlueValue2:integer;
OrigRow,DestRow:pRGBArray;
begin
//getbrightnessincrementvalue
IfTrackBar_Brightness.Position<>0then
Begin
RedValue2:=TrackBar_Brightness.Position;
GreenValue2:=TrackBar_Brightness.Position;
BlueValue2:=TrackBar_Brightness.Position;

ifRedValue2<0thenlabel_Brightness.Caption:=Format("Яркость:%d",[RedValue2])
elseLabel_Brightness.Caption:=Format("Яркость:+%d",[RedValue2]);
//foreachrowofpixels
fori:=0toform3.Image1.Picture.Height-1do
begin
Origrow:=form3.Image1.Picture.Bitmap.ScanLine[i];
DestRow:=form3.Image1.Picture.Bitmap.ScanLine[i];
//foreachpixelinrow
forj:=0toform3.Image1.Picture.Width-1do
begin
//addbrightnessvaluetopixel"sRGBvalues
if(RedValue2-RedValue1)>0then
DestRow[j].rgbtRed:=Min(255,OrigRow[j].rgbtRed+3)
else
DestRow[j].rgbtRed:=Max(0,OrigRow[j].rgbtRed-1);

if(GreenValue2-GreenValue1)>0then
DestRow[j].rgbtGreen:=Min(255,OrigRow[j].rgbtGreen+3)
else
DestRow[j].rgbtGreen:=Max(0,OrigRow[j].rgbtGreen-1);

if(BlueValue2-BlueValue1)>0then
DestRow[j].rgbtBlue:=Min(255,OrigRow[j].rgbtBlue+3)
else
DestRow[j].rgbtBlue:=Max(0,OrigRow[j].rgbtBlue-1);
end;
end;
form3.Image1.Refresh;
RedValue1:=RedValue2;
GreenValue1:=GreenValue2;
BlueValue1:=BlueValue2;
End;
end;

procedureRotateBitmap(Bitmap:TBitmap;Angle:Double;BackColor:TColor);
type
TRGB=record
B,G,R:Byte;
end;
pRGB=^TRGB;
pByteArray=^TByteArray;
TByteArray=array[0..32767]ofByte;
TRectList=array[1..4]ofTPoint;

var
x,y,W,H,v1,v2:Integer;
Dest,Src:pRGB;
VertArray:arrayofpByteArray;
Bmp:TBitmap;

procedureSinCos(AngleRad:Double;varASin,ACos:Double);
begin
ASin:=Sin(AngleRad);
ACos:=Cos(AngleRad);
end;

functionRotateRect(constRect:TRect;constCenter:TPoint;Angle:Double):
TRectList;
var
DX,DY:Integer;
SinAng,CosAng:Double;
functionRotPoint(PX,PY:Integer):TPoint;
begin
DX:=PX+Center.x;
DY:=PY+Center.y;
Result.x:=Center.x+Round(DX*CosAng-DY*SinAng);
Result.y:=Center.y+Round(DX*SinAng+DY*CosAng);
end;
begin
SinCos(Angle*(Pi/180),SinAng,CosAng);
Result[1]:=RotPoint(Rect.Left,Rect.Top);
Result[2]:=RotPoint(Rect.Right,Rect.Top);
Result[3]:=RotPoint(Rect.Right,Rect.Bottom);
Result[4]:=RotPoint(Rect.Left,Rect.Bottom);
end;

functionMin(A,B:Integer):Integer;
begin
ifA<Bthen
Result:=A
else
Result:=B;
end;

functionMax(A,B:Integer):Integer;
begin
ifA>Bthen
Result:=A
else
Result:=B;
end;

functionGetRLLimit(constRL:TRectList):TRect;
begin
Result.Left:=Min(Min(RL[1].x,RL[2].x),Min(RL[3].x,RL[4].x));
Result.Top:=Min(Min(RL[1].y,RL[2].y),Min(RL[3].y,RL[4].y));
Result.Right:=Max(Max(RL[1].x,RL[2].x),Max(RL[3].x,RL[4].x));
Result.Bottom:=Max(Max(RL[1].y,RL[2].y),Max(RL[3].y,RL[4].y));
end;

procedureRotate;
var
x,y,xr,yr,yp:Integer;
ACos,ASin:Double;
Lim:TRect;
begin
W:=Bmp.Width;
H:=Bmp.Height;
SinCos(-Angle*Pi/180,ASin,ACos);
Lim:=GetRLLimit(RotateRect(Rect(0,0,Bmp.Width,Bmp.Height),Point(0,0),
Angle));
Bitmap.Width:=Lim.Right-Lim.Left;
Bitmap.Height:=Lim.Bottom-Lim.Top;
Bitmap.Canvas.Brush.Color:=BackColor;
Bitmap.Canvas.FillRect(Rect(0,0,Bitmap.Width,Bitmap.Height));
fory:=0toBitmap.Height-1do
begin
Dest:=Bitmap.ScanLine[y];
yp:=y+Lim.Top;
forx:=0toBitmap.Width-1do
begin
xr:=Round(((x+Lim.Left)*ACos)-(yp*ASin));
yr:=Round(((x+Lim.Left)*ASin)+(yp*ACos));
if(xr>-1)and(xr<W)and(yr>-1)and(yr<H)then
begin
Src:=Bmp.ScanLine[yr];
Inc(Src,xr);
Dest^:=Src^;
end;
Inc(Dest);
end;
end;
end;

begin
Bitmap.PixelFormat:=pf24Bit;
Bmp:=TBitmap.Create;
try
Bmp.Assign(Bitmap);
W:=Bitmap.Width-1;
H:=Bitmap.Height-1;
Rotate
finally
Bmp.Free;
end;
end;


 
Рамиль ©   (2008-06-06 09:29) [1]

Ты их написал? Если писал, то какая проблема написать пять-шесть предложений?
Если код не твой, то бегом за метлой, пока не закончились в магазинах. А то скоро дефицитным товаром станут.


 
Тын-Дын ©   (2008-06-06 10:00) [2]


> PHoeNiX   (06.06.08 09:26) 


Предлагаю комменты взять там же, где код.


 
Ляпа   (2008-06-06 12:38) [3]

http://delphimaster.net/view/15-1211392855/


 
PHoeNiX   (2008-06-06 16:46) [4]


> Предлагаю комменты взять там же, где код.

код взят с DelphiWorld 6. Словесного описания нет. И нигде нет..

> Ты их написал? Если писал, то какая проблема написать пять-
> шесть предложений?

если бы я целиком и полностью сам писал код этих процедур, то я бы не спрашивал.

> Если код не твой, то бегом за метлой, пока не закончились
> в магазинах. А то скоро дефицитным товаром станут.

не смешно


 
Рамиль ©   (2008-06-06 17:14) [5]

Вот именно, что не смешно.


 
Омлет   (2008-06-06 17:36) [6]

О Боже, последнюю про вращение писал я, лет семь назад, еще в школе, а потом гордо положил в единую базу процедур и функций. Я же не думал, что кто-то будет это использовать ))


 
Омлет   (2008-06-06 17:40) [7]

Вот здесь хотя бы отформатированы:
http://kladovka.net.ru/delphibase/?action=viewtopic&topic=mediaimg


 
Рамиль ©   (2008-06-06 17:54) [8]


> Омлет   (06.06.08 17:40) [7]

А почему без комментариев выложил? Видишь, люди мучаются.


 
Омлет   (2008-06-06 18:01) [9]

> Рамиль ©   (06.06.08 17:54) [8]

Как было, так и выложил, не прибавив, не убавив )


 
PHoeNiX   (2008-06-06 19:03) [10]

to Рамиль, to Омлет.
Я понял, что вы ничем не поможете. Зачем разводить демогогию и стебаться. Был конкретный вопрос. Нет конкретного ответа, не надо умничать


 
ketmar ©   (2008-06-06 19:20) [11]

>[10] PHoeNiX (2008-06-06 19:03:00)
опять ребёнок-хам. тебя сюда звали? просили пояснять нам, что делать, а что нет? не звали. не просили. веди себя прилично, сиди и слушай. не можешь, не хочешь — интернеты большие.

---
All Your Base Are Belong to Us


 
Игорь Шевченко ©   (2008-06-06 19:22) [12]


> Нужно для каждой процедуры алгоритм и принцип работы


А ты программист или тоже раз в месяц на полчаса от метлы отрываешься ?


 
palva ©   (2008-06-06 19:34) [13]

Сначала берем где-то непонятно кем написанный код...
Затем просим на форуме исправить ошибки, чтобы заработало...
Теперь уже комментарии нужны. Только не надо грузить всякими объяснениями - именно комментарии вставить в нужное место кода.
Осталось только свой копирайт поставить.

Вот путь к успеху и финансовому благополучию!


 
Ega23 ©   (2008-06-06 19:49) [14]

Совсем студенты-недоучки обнаглели...
Вот не понимаю я, нафига учиться программировать, если ты не то, что написать сам - не можешь сам разобраться в ГОТОВОМ коде???

З.Ы. Ща пойдут отмазы, что "я вообще не на программиста учусь", "препод - козёл, в семестре ничего не давал и семинаров-лекций не проводил" и "да мне бы только зачОт сдать"...


 
ketmar ©   (2008-06-06 20:02) [15]

>[14] Ega23 © (2008-06-06 19:49:00)
да-да. «код не мой, я только пост разместил»

---
All Your Base Are Belong to Us


 
PHoeNiX   (2008-06-06 20:05) [16]

> ketmar
1) не ребенок
2) не хам, я думаю вам тоже было бы не приятно, если бы вас обсуждали в неприятном ракурсе
> Игорь Шевченко
Я не программист, но учусь
> pavla
код процедур взят у преподавателя. Процедуры использовались для написания графического редактора (без посторонней помощи), который нормально работает.
> ega32
Между прочим учусь я хорошо и отмазы мне не нужны.


 
Ega23 ©   (2008-06-06 20:13) [17]


> Я не программист, но учусь


Ложь.


> Между прочим учусь я хорошо и отмазы мне не нужны.


Ещё одна ложь.

Если бы ты учился хорошо, то вопрос бы стоял так:
Есть раздел описания переменных и процедуры изменения резкости, контрастности, яркости и вращения изображения. Нужно для каждой процедуры алгоритм и принцип работы(хотябы 5-6 предложений на каждую процедуру). Я написал вот это, это и вот это, но у меня нет уверенности, что вот к этой процедуре я написал правильно (потому что ....). Правильно ли я написал и обоснованы ли мои сомнения? Выручайте пожалуйста


И отношение было бы совершенно другое: человек действительно поработал головой, но, поскольку ещё только учится - его гложут сомнения.


 
palva ©   (2008-06-06 20:15) [18]


PHoeNiX   (06.06.08 20:05) [16]
> код процедур взят у преподавателя.

Ну это я не про вас, конечно. Ворчу абстрактно.


 
Ega23 ©   (2008-06-06 20:15) [19]

А так - ещё один халявщик. Который почему-то считает, что форум существует для того, чтобы ему делали работу.
Форум существует для того, чтобы помогать. А не делать за тебя.
Почувствуй разницу.


 
Игорь Шевченко ©   (2008-06-06 20:21) [20]


> Я не программист, но учусь



> Нужно для каждой процедуры алгоритм и принцип работы(хотябы
> 5-6 предложений на каждую процедуру).Выручайте пожалуйста


Обучение обычно предполагает самостоятельный процесс. Форум как бы не учится и не давал тебе заданий.


> код процедур взят у преподавателя


Тогда наверняка преподаватель будет так любезен, что расскажет и алгоритм.

Впрочем, я сильно сомневаюсь, чтобы преподаватель давал код, подобный этому:


> forx:=0toBitmap.Width-1do


Блин, не дай бог, выучишься, кому-то с тобой ведь и работать придется.


 
palva ©   (2008-06-06 20:25) [21]


> > forx:=0toBitmap.Width-1do

Источник кода pdf-файл или что-то вроде. Во всяком случае не файл pas. Копипаст съел форматирование и пробелы. А автор даже на него не посмотрел, чтобы разобраться, исправить и опробовать в деле.


 
PHoeNiX   (2008-06-06 20:27) [22]

Я не халаявщик. И вобще, чего я отговариваюсь. Вы меня не видели, не знаете, а судите человека по событиям, которые не отражают сущность.
Все равно я доволен тем, что проучив в универе 3 месяца Turbo Pascal, я за короткий промежуток времени изучил Delphi хотя бы на начальном, начинающем уровне. Пусть даже я использовал 3 процедуры. Я сомневаюсь, что вы через 3-4 недели изучения delphi смогли бы написать эти процедуры без чьей-либо помощи


 
PHoeNiX   (2008-06-06 20:30) [23]

> Игорь Шевченко, pavla
источник кода - Delphi World 6. Пробелы вырезал для того, чтобы сообщение уместить на форуме


 
Игорь Шевченко ©   (2008-06-06 20:30) [24]

PHoeNiX   (06.06.08 20:27) [22]

На этой благой ноте дискуссия может быть закончена.
Научись уважать людей и они к тебе тоже станут относиться с уважением.


 
Игорь Шевченко ©   (2008-06-06 20:31) [25]


> Пробелы вырезал для того, чтобы сообщение уместить на форуме


так ты еще и гад


 
PHoeNiX   (2008-06-06 20:35) [26]

спасибо за оскорбления((
я и без этого отношусь к людям хорошо. Я старался отвечать как можно вежливей, никого не оскорблять и не задевать ничьего самолюбия. Но, увы, в ответ получил кучу оскарблений.


 
Игорь Шевченко ©   (2008-06-06 20:39) [27]

Изучать до полного просветления:
http://ln.com.ua/~openxs/articles/smart-questions-ru.html


 
ketmar ©   (2008-06-06 20:41) [28]

>[22] PHoeNiX (2008-06-06 20:27:00)
для того, чтобы увидеть наглого ребёнка, не обязательно смотреть ему в лицо. твои посты говорят сами за себя.

---
All Your Base Are Belong to Us


 
PHoeNiX   (2008-06-06 20:57) [29]

известная притча:
...после долгого путешествия странник набрел на слепого отшельника перед городом. подошел к нему и спрашивает: "Здравствуй, Отшельник! Каково мне будет жить в этом городе, какие в нем люди? -А как тебе жилось в прошлом городе? - Плохо, и все люди там плохие. - Ну тогда тебе и здесь плохо тебе будет."
Приходит другой странник в этот же город. -Здравствуй, добрый человек, коково жить в этом городе, какие здесь люди? - А как тебе жилось в старом городе? - Замечательно, и люди там прекрасные. - Ну тогда тебе и здесь будет замечательно"
Вывод: каков человек есть на самом деле, пусть в далекой далекой глубине, так он видит и других. Этим человек пытается закрыть свои недостатки.

Спасибо всем, кто ответил. Я думаю дискуссию можно закрыть. Все равно ничего хорошего дальше не будет.
Я есть такой как есть, и считаю, что судить нехорошо.
И простите все, кому чем то неугодил.



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

Форум: "Прочее";
Текущий архив: 2008.07.20;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.54 MB
Время: 0.042 c
2-1213947379
uno-84
2008-06-20 11:36
2008.07.20
Передача ссылки на файл по почтовику


2-1213697997
Beluy
2008-06-17 14:19
2008.07.20
Quick Report For Delphi


6-1189537494
Sharp
2007-09-11 23:04
2008.07.20
помогите с куками


15-1212254418
wl
2008-05-31 21:20
2008.07.20
Валерий Фаронов. Delphi 2005. Руководство по переходу с...


2-1213959404
Alex_C
2008-06-20 14:56
2008.07.20
Вопрос по GetObjectProp





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