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

Вниз

Отбросить тень TLabel и получит её регион и регин   Найти похожие ветки 

 
lesee ©   (2005-09-30 00:13) [0]

как Отбросить тень TLabel (непосредственно букв) и получить её регион и регион самих букв


 
Юрий Зотов ©   (2005-09-30 05:08) [1]

> как Отбросить тень TLabel (непосредственно букв)

1. Выводим текст цветом тени (обычно темно-серым).
2. Прямоугольник, в котором выводился текст сдвигаем на несколько пикселей (обычно 1-3) навстречу воображаемому источнику света (обычно влево-вверх).
3. Выводим тот же текст цветом шрифта.

> и получить её регион и регион самих букв

А вот это поподробнее, плз - о чем идет речь? Какие-такие регионы у букв?


 
TUser ©   (2005-09-30 10:32) [2]

> и получить её регион и регион самих букв

Это прямоугольник, размеры которого можно узнать через Canvas.TextWidth, Canvas.TextHeight, где Canvas - канва того компонента, на котором рисуется TLabel.


 
lesee ©   (2005-09-30 19:20) [3]

Нееет :)) регион прямоугольника все умеют, как посчитать регион букв ?!


 
Gorger ©   (2005-09-30 19:41) [4]

Вот тебе процедура для получения региона по битмапу. Работает правда кривовато, но идея там правильная. Твоя же идея такая: нужно получить битмап для каждой буквы и пихнуть его в мою процедуру, правда ее изменить будет нужно, она масштабирует немного этот регион.
Буквы при этом обязательно должны быть черные, фон- обяз. белый. Как это сделать? - через BitBlt.Порой в Win32SDK Help.
А у тебя вообще получатся оченб маленькие регионы. Незнаю даже, получится ли.. Разве что буквы будут 24-30 шрифта.
function SofisticForm(PBmp:TBitmap;FormHandle:DWORD;OffsX:Integer;OffsY:Integer):HRGN;
//type  TMyByteArray = array[0..32767] of Byte;
var
i,j,unt:Integer;
Ms:TStringStream;
fileLog:TextFile;
n,bk:integer;
bwork:Tbitmap;
BoundsL:array [1..100] of TPoint;
BoundsR:array [1..100] of TPoint;
ResultArr:Array[1..200] of TPoint;
s:string;
//RowLens:array of integer;
Reg1,Reg2:HRGN;
begin
For i:=1 to 100 do begin
ResultArr[i].X:=0; ResultArr[i].Y:=0;
ResultArr[i+100].X:=0; ResultArr[i].Y:=0;
BoundsR[i].X:=0;BoundsR[i].Y:=0;
BoundsL[i].X:=0;BoundsL[i].Y:=0;
end;
Ms:=TStringStream.Create("");
AssignFile(FileLog,"Log.txt");
Rewrite(FileLog);
bwork:=TBitmap.Create;
Bwork.Assign(PBmp);
n:=0;
//Setlength(rowlens,BWork.Height);
//SetLength(BoundsR,BWork.Height*3);
//SetLength(BoundsL,BWork.Height*3);
for i:=0 to BWork.Height-1 do begin
Pba:=Bwork.ScanLine[i];
for j:=0 to (BWork.Width*3)-1 do begin
If Pba[j]=255 then Pba[j]:=0 else Pba[j]:=255;
Ms.WriteString(Char(Pba[j] mod 254+Ord("0")));
end;
Ms.WriteString(#13+#10);
end;
Ms.Seek(0,0);
i:=1;
While Ms.Position<Ms.Size do begin
s:=Ms.ReadString((Bwork.Width*3)+2);
BoundsL[i].X:=Pos("1",s);
s:=ReverseString(s);
BoundsR[i].X:=((Length(s)-2))-Pos("1",s);
BoundsR[i].y:=i;
BoundsL[i].Y:=i;
write(filelog,"[",BoundsL[i].X,"-",BOundsR[i].X,"]",BOundsR[i].Y,#$D,#$A);
inc(i);
end;
write(filelog,Ms.DataString);
CloseFile(FileLog);
n:=1;
While (BoundsL[n].X=0) do inc(n);
for i:=1 to Length(BoundsL) do begin
if i<=n then BoundsL[i]:=BoundsL[(n-1)+i]
else BoundsL[i]:=BoundsL[n+n+i];
end;
n:=1;
While BoundsR[n].X=(BWork.Width*3) do inc(n);
for i:=1 to Length(BoundsL) do begin
if i<=n then BoundsR[i]:=BoundsR[(n-1)+i]
else BoundsR[i]:=BoundsR[n+n+i];
end;
{While (BoundsR[n].X<>0) do inc(n);|
{Form2.PaintBox1.Canvas.MoveTo(BoundsR[1].X+150,BoundsR[i].Y+150);}
i:=1;
while BoundsR[i].X<>BWork.Width*3 do begin
ResultArr[i].X:=BoundsR[i].X;
ResultArr[i].Y:=BoundsR[i].Y;
i:=i+1;
end;
n:=i;
For i:=n downto 1 do begin
ResultArr[n+((n-1)-i)].X:=BoundsL[i].X;
ResultArr[n+((n-1)-i)].Y:=BoundsL[i].Y;
end;
ResultArr[((n-1)*2)]:=ResultArr[1];
{Reg2:=CreatePolygonRgn`BoundsR,BWork.Height,1);
CombineRGN(Reg1,Reg2,Reg1,rgn_xor);}
SofisticForm:=CreatePolygonRgn(ResultArr,(n*2),1);
//Form2.Refresh;
Bwork.Free;
Ms.Free;
end;


 
Gorger ©   (2005-09-30 19:43) [5]

Некоторые переменные лишние,некоторые в глобальнике объявлены, вообще код надотпочистить, но все же...ТАк что прошу не очень ругать.


 
lesee ©   (2005-10-02 15:21) [6]

Угу, интересно, спасибо, я уже научился перегонять в Bitmap:
bit:=TBitmap.Create;
Bit.Height:=Label1.Height;
bit.Width:=Label1.Width;
for i:=0 to Label1.Width do
for y:=0 to Label1.Height do
begin
if Label1.Canvas.Pixels[i,y]=Label1.Font.Color then
bit.Canvas.Pixels[i,y]:=Label1.Canvas.Pixels[i,y]
 else bit.Canvas.Pixels[i,y]:=clWhite;
end;
, а из него в регион есть классная функция, описанная, кажется на исходник.ру.


 
Джо ©   (2005-10-02 21:16) [7]

Чем так мучаться, то лучше б уже GetGlyphOutline использовал.


 
wicked ©   (2005-10-02 22:24) [8]

> Джо ©   (02.10.05 21:16) [7]
ууу.... судя по вопросу, ответ ЮЗа самое то.... GetGlyphOutline - непростая функция, даже в мсдн признается.... ;)


 
Джо ©   (2005-10-02 23:49) [9]

Да, похоже с GetGlyphOutline я ошибся и насчет "попроще" и насчет полезности. Битовую картинку получить несложно, но смысла не имеет, так как ее точно также можно получить при помощи TextOut, а Transformation Matrix не нужен. Если же получать в Native-формате, то, возможно это был бы отличный вариант, но, все-равно функций перевода его в region нету, а сам формат зубодробильный :\



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

Форум: "Основная";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.04 c
1-1128075590
Mishenka
2005-09-30 14:19
2005.10.23
Как в StatusBar сделать hint у определённой панели?


2-1127807859
begin
2005-09-27 11:57
2005.10.23
Динамическая коллекция объектов


2-1127678744
Pasha L
2005-09-26 00:05
2005.10.23
Ошибка при createprocess


1-1128327918
Yuri Btr
2005-10-03 12:25
2005.10.23
Текущая версия Delphi 2005


14-1128002509
NewWonder
2005-09-29 18:01
2005.10.23
Сайтострой





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