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

Вниз

Проблемы с transparent   Найти похожие ветки 

 
rect   (2009-05-26 20:42) [0]

Если рисовать текст крупного размера в Timage с включенной прозрачностью, то по краям букв видны белые точки. Можно ли как-нибудь этого избежать?


 
rect   (2009-05-26 22:51) [1]

Неужели никто не может мне помочь? Если вы не поняли впопрос, то могу уточнить:
Пишу
image.transparent:=true;
image.canvas.font.size:=34;
image.canvas.font.fontname:="Times New Roman";
image.canvas.TextOut(0,0,"ЫЫЫЫЫ");


При больших размерах шрифта по краям букв видны белые, не ставшие прозрачными, точки. Можно ли как то этого избежать?


 
Игорь ©   (2009-05-26 23:25) [2]


> Если вы не поняли впопрос


Непонятно зачем рисовать на image, да ещё с transparent:=true


 
rect   (2009-05-26 23:27) [3]


> Непонятно зачем рисовать на image, да ещё с transparent:
> =true


Рисовать поверх другой картинки с последующим сохранением в файл. Что тут может быть непонятного :)


 
Игорь ©   (2009-05-26 23:40) [4]

image.Canvas.Brush.Style:= bsClear


 
rect   (2009-05-26 23:58) [5]

к сожалению, не помогло :(


 
Игорь ©   (2009-05-27 00:10) [6]


> rect   (26.05.09 23:58) [5]


Ну тогда извини, я не телепат, как же ты хочешь что бы тебе помогли если не понятно что и как ты там рисуешь на image кроме

image.transparent:=true;
image.canvas.font.size:=34;
image.canvas.font.fontname:="Times New Roman";
image.canvas.TextOut(0,0,"ЫЫЫЫЫ");


 
rect   (2009-05-27 00:28) [7]


> Игорь


Даже если просто создать новый проект, разместить на форме image, покрасив предварительно форму, например, в синий цвет, и по событию formshow выполнять приведенный мною код, видны ошибки в прозрачности


 
KilkennyCat ©   (2009-05-27 01:58) [8]


> Даже если просто создать новый проект, разместить на форме
> image, покрасив предварительно форму, например, в синий
> цвет, и по событию formshow выполнять приведенный мною код

то работать не будет.


 
KilkennyCat ©   (2009-05-27 02:02) [9]

и даже исправив ошибку, белых точек не обнаружил. даже с размером шрифта в 534
Может, это координатная сетка? :)


 
brother ©   (2009-05-27 06:14) [10]

delphi какая?
на 6:
image1.canvas.font.fontname:="Times New Roman";
нет свойства, без него все ок! Битый шрифт?


 
Григорьев Антон ©   (2009-05-27 08:28) [11]

Видимо, у кого-то включен режим сглаживания текста, а у кого-то нет. У тех, у кого включен, по краям букв появляются точки, близкие по цвету к фону, но не совпадающие с ним, поэтому они не становятся прозрачными. У кого этот режим выключен, граница букв резкая, и точки, соответственно, не появляются. Где-то тут недавно проскакивал вопрос, как вывести резкий текст при включенном сглаживывании, поищите. Суть в том, что TFont там не поможет, надо вручную формировать TLogFont и устанавливать шрифт через API.


 
KilkennyCat ©   (2009-05-27 09:24) [12]


> Григорьев Антон © (27.05.09 08:28) [11]
> Видимо, у кого-то включен режим сглаживания текста, а у
> кого-то нет


Ага. У меня выкл.


 
rect   (2009-05-27 14:10) [13]


> image1.canvas.font.fontname:="Times New Roman";
> нет свойства, без него все ок!


Писал по памяти и немного ошибся. Конечно же image.Canvas.Font.Name


> Григорьев Антон


буду пробовать. Вполне возможно, что так и есть. Так как подобный "глюк" возникает и в 7 и в 2009 Delphi

http://www.picamatic.com/view/3780643_2/


 
rect   (2009-05-27 14:36) [14]


> Григорьев Антон


Вы имели ввиду эту тему? (http://delphimaster.net/view/2-1242301358/)


 
Григорьев Антон ©   (2009-05-27 16:02) [15]


> rect   (27.05.09 14:36) [14]

Да, эту. Помогло?


 
{RASkov} ©   (2009-05-27 16:38) [16]

Можно еще попробывать так:
код из [1]:
image.transparent:=true;
image.canvas.font.size:=34;
image.canvas.font.fontname:="Times New Roman";
image.canvas.brush.color:= //цвет парента image"са например если это форма то - :=Color;
image.canvas.TextOut(0,0,"ЫЫЫЫЫ");

Я думаю автору этого будет достаточно)


 
rect   (2009-05-27 23:42) [17]


> Да, эту. Помогло?
>


Если нижеприведенный мною код правильный, то не работает :(

fnt: TLogFont;
begin
i.Canvas.Font.Color:=clBlack;
i.Canvas.Font.Size:=50;
i.Canvas.Font.Name:="Times New Roman";
i.Transparent:=true;
GetObject(i.Canvas.Font.Handle, SizeOf(TLogFont), @Fnt);
fnt.lfQuality := 0;
i.Canvas.Font.Handle := CreateFontIndirect(Fnt);
i.Canvas.TextOut(0,100,"2339448234");



> {RASkov}


Вряд ли, так как фон у меня может содеражть несколько цветов


 
rect   (2009-05-27 23:44) [18]

Придумал пока только следующий "извращённый" способ:

for j:=1 to i.Width do
for k:=1 to i.Height do
if (i.Canvas.Pixels[j,k]<>clBlack) and (i.Canvas.Pixels[j,k]<>clWhite)  then i.Canvas.Pixels[j,k]:=clBlack;


Правда в этом случае качество шрифтов немного хромает :)


 
KilkennyCat ©   (2009-05-27 23:46) [19]

что, качество не сработало?


 
KilkennyCat ©   (2009-05-27 23:46) [20]


> KilkennyCat © (27.05.09 23:46) [19]

fnt.lfQuality := 0; ?


 
rect   (2009-05-27 23:51) [21]


> что, качество не сработало?


не понял вопроса


> fnt.lfQuality := 0; ?


При любом значении параметра результат на экране абсолютно одинаков


 
KilkennyCat ©   (2009-05-27 23:51) [22]

Вообще, странная манера создания логфонта... стандартный пример:
procedure TMainForm.MakeFont;
begin
 // Clear the contents of FLogFont
 FillChar(FLogFont, sizeof(TLogFont), 0);
 // Set the TLOGFONT"s fields
 with FLogFont do
 begin
   lfHeight := StrToInt(seHeight.Text);
   lfWidth := StrToInt(seWidth.Text);
   lfEscapement := StrToInt(cbEscapement.Items[cbEscapement.ItemIndex]);
   lfOrientation := StrToInt(cbOrientation.Items[cbOrientation.ItemIndex]);
   lfWeight := WeightArray[cbWeight.ItemIndex];
   lfItalic := ord(cbxItalic.Checked);
   lfUnderline := ord(cbxUnderLine.Checked);
   lfStrikeOut := ord(cbxStrikeOut.Checked);
   lfCharSet := CharSetArray[cbCharset.ItemIndex];
   lfOutPrecision := OutPrecArray[cbOutPrec.ItemIndex];
   lfClipPrecision := ClipPrecArray[cbClipPrec.ItemIndex];
   lfQuality := QualityArray[rgQuality.ItemIndex];
   lfPitchAndFamily := PitchArray[rgPitch.ItemIndex] or FamilyArray[cbFamily.ItemIndex];
   StrPCopy(lfFaceName, cbFontFace.Items[cbFontFace.ItemIndex]);
 end;
 // Retrieve the requested font
 FHFont := CreateFontIndirect(FLogFont);
 // Assign to the Font.Handle
 pbxFont.Font.Handle := FHFont;
 pbxFont.Refresh;
end;

источник: http://www.delphisources.ru/pages/faq/base/make_font.html


 
sniknik ©   (2009-05-27 23:58) [23]

> Придумал пока только следующий "извращённый" способ:
блин, да выведи его на "подложку" без прозрачности, тот же битмап, и уже после назначь ему прозрачный цвет и рисуй с этой подложки туда куда надо.

ктати так и не понял, а нафига рисовать на прозрачном имедже? в чем тайный смысл?


 
rect   (2009-05-28 00:02) [24]


> sniknik


Может быть задам глупый вопрос, но что такое "подложка"?


 
sniknik ©   (2009-05-28 00:15) [25]

создай битмап динамически, не ложа его на форму, и считай его "подложкой" рисуй на нем. все что угодно, после перерисуй (Draw) с него куда надо.


 
Германн ©   (2009-05-28 01:24) [26]

Задача так до сих пор и непонятна.
С одной стороны нужно что-то выводить на "прозрачном" TImage. С другой стороны
> Вряд ли, так как фон у меня может содеражть несколько цветов
? "Прозрачный фон" не может содержать "несколько цветов"!
Или я что-то не понял?


 
rect   (2009-05-28 01:35) [27]

Всем спасибо! Код из [17] работает правильно, просто я к своему стыду неправильно понял смысл параметра lfQuality :)


 
rect   (2009-05-28 01:46) [28]

Для всех интересующихся подробнее опишу свою задачу: На форме есть один большой главный image в который будет загружаться цветная картинка. Далее поверх этого image будут создаваться динамические, в которых будет выводится текст и нужно, чтобы главная картинка оставалась видна (для этого и использую transparent)


 
sniknik ©   (2009-05-28 01:53) [29]

> поверх этого image будут создаваться динамические, в которых будет выводится текст
а TLabel не проще? он тоже может текст показывать...


 
Германн ©   (2009-05-28 01:55) [30]


> rect   (28.05.09 01:46) [28]
>
> Для всех интересующихся подробнее опишу свою задачу: На
> форме есть один большой главный image в который будет загружаться
> цветная картинка. Далее поверх этого image будут создаваться
> динамические, в которых будет выводится текст и нужно, чтобы
> главная картинка оставалась видна (для этого и использую
> transparent)

???


 
Игорь Шевченко ©   (2009-05-28 02:02) [31]


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


Это не задача, это реализация задачи.

Ты к совету [25] прислушайся, а то потом будешь спрашивать, как прозрачную картинку поверх своего Image нарисовать или надпись шрифтом полупрозрачную сделать.


 
Игорь Шевченко ©   (2009-05-28 02:15) [32]

Германн ©   (28.05.09 01:55) [30]


> ???


http://cid-2fbfd926d50f54d0.skydrive.live.com/self.aspx/LabelEffect


 
Германн ©   (2009-05-28 02:19) [33]


> Игорь Шевченко ©   (28.05.09 02:15) [32]
>
> Германн ©   (28.05.09 01:55) [30]
>
>
> > ???
>
>
> http://cid-2fbfd926d50f54d0.skydrive.live.com/self.aspx/LabelEffect

Не аонял.
Попробую понять завтра.


 
Игорь Шевченко ©   (2009-05-28 02:22) [34]


> Не аонял.
> Попробую понять завтра.


Картинки не видно ?



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

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

Наверх




Память: 0.55 MB
Время: 0.013 c
2-1243791655
Сергей
2009-05-31 21:40
2009.07.26
TTreeNode


15-1242940174
DillerXX
2009-05-22 01:09
2009.07.26
О теме КПК


15-1242772016
Petr V. Abramov
2009-05-20 02:26
2009.07.26
блин! ну и ТЗ :)


15-1243413974
b/@.
2009-05-27 12:46
2009.07.26
Как нарисовать в иконке оранжевый ?


6-1205446069
IFrau Randt
2008-03-14 01:07
2009.07.26
NMHTTP