![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Рисование на канве Image [D7, WinXP]
kyn66 © (2007-12-10 16:30:00)На форме есть Image1 размером 168х320 pix. Пытаюсь в цикле на канву вывести шрифт. Почему не рисуется на канве?
...
for y := 5 to 10 do
Image1.Canvas.TextOut(5 , y, chr(y));
...
kyn66 (2007-12-11 09:23:00) [1]Нет, все окейно, я действительно ошибся с назначением размера имагеса, все работает, спасибо !
{RASkov} (2007-12-10 18:06:00) [2]> [0] kyn66 (10.12.07 16:30)
> размером 168х320 pix
или тебе именно в этот рект нужно "загнать"?
Тогда алгорит сменится... Немного не так должно быть, но не намного сложнее....
kyn66 (2007-12-10 17:59:00) [3]Спасибо, попробую разбираться сам
{RASkov} (2007-12-10 17:56:00) [4]> [12] kyn66 (10.12.07 17:26)
Размеры Image'су "не правильные" задаешь....
Я же тебе пример вывода на канву формы сделал.... а уж размер общего прямоугольника посчитать, я думаю сам сожешь....
Также +5 и +2 можешь убрать, это я для лучшего восприятия сделал :)
kyn66 (2007-12-10 17:26:00) [5]вроде похоже, но ешшо не то, какой-то он обрезаный получился
http://yurec66.narod.ru/Vopros/arial.png
{RASkov} (2007-12-10 17:16:00) [6]> [9] kyn66 (10.12.07 17:12)
> А на выходе тока 1 символ "Я"
А подумать????
У тебя чему равны X и Y?
{RASkov} (2007-12-10 17:13:00) [7]> [9] kyn66 (10.12.07 17:12)
procedure TForm1.Button1Click(Sender: TObject);
var R, C, W, H, Chw, Chh: Integer; Ch: Byte;
begin
Chw:=Canvas.TextWidth('W')+5;
Chh:=Canvas.TextHeight('W')+2;
for C:=0 to 15 do
for R:=0 to 13 do begin
Ch:=32+((16*R)+C);
W:=Chw*C;
H:=Chh*R;
Canvas.TextOut(W, H, CHR(Ch));
end;
end;
kyn66 (2007-12-10 17:12:00) [8]
> Сделай два цикла... один вложеный в другой...
Это просто пример для показа здесь. Полный текс вааще такой:
Image1.Picture.Bitmap.Width := 180;
Image1.Picture.Bitmap.Height := 320;
for y:= 0 to 13 do
for x:= 0 to 15 do
begin
fnt := y * 16 + x + 32;
Image1.Canvas.TextOut(x , y, chr(fnt));
end;
А на выходе тока 1 символ "Я"
kyn66 (2007-12-10 17:06:00) [9]
> for y := 0 to 3 do Image1.Canvas.TextOut(5 , y * 32, chr(y+32));
так вааще ни одного 8-(
homm (2007-12-10 17:00:00) [10]> [5] kyn66 (10.12.07 16:54)
> Дело в том, что рисует, только один символ.
Ах вот оно что :)
for y := 0 to 3 do
Image1.Canvas.TextOut(5 , y * 32, chr(y+32));
{RASkov} (2007-12-10 16:58:00) [11]> [5] kyn66 (10.12.07 16:54)
Сделай два цикла... один вложеный в другой...
kyn66 (2007-12-10 16:54:00) [12]Дело в том, что рисует, только один символ. Почему в цикле не рисует.Есть другой вариант, рисует все символу, но в одну строку, а мен нужно 16х14
...
w := 0
For i:=32 to 255 do
Begin
Image1.Canvas.TextOut(w , 0, chr(i));
w := w + StringGrid1.Canvas.TextWidth(chr(i));
end;
...
Eraser (2007-12-10 16:50:00) [13]
> kyn66 (10.12.07 16:30)
imho, скорее всего, помимо ошибки в алгоритме, вы не там рисуете. Рисовать можно либо на Image1.Picture.Bitmap.Canvas либо на битмапе в памяти, а отображать через WM_PAINT (OnPaint) какого-нибудь оконного контрола. В общем случае, второй вариант правильнее. У вас ни тот, ни другой.
kyn66 (2007-12-10 16:49:00) [14]>> Efir
Немного ошибся, просто хотел пример по быстрому привести
for y := 32 to 35 do
Image1.Canvas.TextOut(5 , y + 32, chr(y));
KSergey (2007-12-10 16:44:00) [15]> kyn66 (10.12.07 16:30)
> for y := 5 to 10 do
> Image1.Canvas.TextOut(5 , y, chr(y));
Смещаться на 1 пиксель для вывода очередной буквы - маловато будет, однако. Ну в смысле - буквы наложатся одна на другую.
Хотя, конечно, Efir прав по поводу основнй причины.
Efir (2007-12-10 16:36:00) [16]Прежде чем писать такой код следует заглянуть в таблицу ASCII и увидеть, что букав таких нету. А начинаюся они с кода 32.