TImage

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

TImage

Сообщение vitaly_l » 25.05.2012 17:25:48

var
image : TImage;

Код: Выделить всё
  image[1].Picture.LoadFromFile('box.png');
  for x := 5 to 55 do
       for y := 5 to 55 do
           image[1].Picture.Bitmap.Canvas.Pixels[x,y] := clRed; //<=== здесь сбой... вместо красного рисует прозрачным...



  image[2].Picture.LoadFromFile('box.png');
  for x := 0 to image[2].Height do
       for y := 0 to image[2].Width do
           image[2].Picture.Bitmap.Canvas.Pixels[x,y] := clRed; //<=== а здесь рисует нормально...


:!: Требуется, чтобы "рисовал" от 5 до 55...
:!: однако: image - рисует правильно только когда от 0 до Height...Width, а в остальных случаях делает прозрачным
:!: Вот ещё важно, изначально в image загружен *.png с прозрачностью

:?: :arrow: Вопрос: Как это реализовать??? и в чём подвох?!

В аттаче код и project1 lazarus.

PS: (кстати у TImage точно такие же проблемы с прозрачностью, если накладывать на изображение CopyRect или BitBlt или StretchDraw)


.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: TImage

Сообщение Ism » 26.05.2012 02:18:56

Возможно дело в режиме рисунка, вы ставите точку на image , а надо ставить внутри на самом битмепе, может сделать assign на TBitmap и с ним работать
И еще у вас png , это не родной формат для лазаруса

Код: Выделить всё
b:TBitmap;
begin           
b.Assign(image[0].Picture.Bitmap); 
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: TImage

Сообщение vitaly_l » 26.05.2012 07:58:08

Странно, возникают закономерные вопросы...:
изначальный image[0].Picture.Bitmap и предлагаемый b:TBitmap - разве не одно и тоже???

Ism писал(а):png , это не родной формат для лазаруса

Разве Лазарус не переводит png в Bitmap, когда png открывает???

Ваш вариант, ещё не пробовал.
В любом случае: Спасибо за ответ.


.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: TImage

Сообщение Ism » 26.05.2012 13:49:56

C bmp работает, возможно проблема в прозрачности png , лазарус возможно не умеет с ней корректно работать , возможно поможет
http://wiki.freepascal.org/Developing_with_Graphics
http://wiki.freepascal.org/BGRABitmap
http://devdelphi.ru/?p=304
http://www.rpdn.ru/forum/17/57/

Код: Выделить всё
var
  bmp: TBitMap;
begin
  Image1.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Image.png');
  bmp := TBitMap.Create;
  bmp.Assign(Image1.Picture.Graphic);
  bmp.SaveToFile('Image.bmp');
  bmp.Free;
end;


Добавлено спустя 42 минуты 55 секунд:
Вот здесь , кажется , как обойти проблему с png
http://lazarus.freepascal.org/index.php?topic=8145.0
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: TImage

Сообщение vitaly_l » 26.05.2012 17:51:26

Громадное спасибо за "http://адреса.ext" - там очень много полезного.

Ism писал(а):возможно проблема в прозрачности png

Изначальная проблема в глубине цвета (8,24,32 bit)... т.к. при различной глубине цвета - разные баги...
А прозрачность качественно работает - только когда png грузится самим Lazarus, а потом идёт сбой :( .
Очевидно я изначально пошёл нестандартным путём TImage, который не работает.
Там полно примеров - очевидно они работают. Спасибо - большое; человеческое.


.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: TImage

Сообщение qivi » 26.05.2012 23:44:09

Тут точно есть как работать с прозрачностью и PNG
http://wiki.freepascal.org/BGRABitmap
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: TImage

Сообщение vitaly_l » 27.05.2012 08:07:47

qivi писал(а):Тут точно есть как работать с прозрачностью и PNG

Спасибо. BGRABitmap - умеет всё, что требуется.

Вот здесь - есть ещё больше: http://sourceforge.net/projects/lazpaint/files/


.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: TImage

Сообщение qivi » 27.05.2012 12:26:37

Вот здесь - есть ещё больше: http://sourceforge.net/projects/lazpaint/files/

Это программка демонстрирующая его возможности.
Можеш ещё посмотреть набор контролов основанных на нём: http://wiki.freepascal.org/BGRAControls
П.С.: хорошо бы было если бы им заменили стандартное ядро LCL работающее с графикой.
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: TImage

Сообщение vitaly_l » 27.05.2012 13:13:44

qivi писал(а):хорошо бы было если бы им заменили стандартное ядро LCL работающее с графикой

Думаю это - технически неправильно... т.к. многие уже использовали старый стандарт.

PS: Было бы правильно если бы его включили в стандартное ядро работающее с графикой.
Однако и в такой ситуации суть в том, что есть ещё более мощные пакеты, единовременно обрабатывающие: и растр, и вектор, и 3D...
Вывод: самый правильный вариант - выбирай, то, что больше нравится... :(


Спасибо.
.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: TImage

Сообщение qivi » 27.05.2012 14:31:56

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

Думаю это - технически неправильно... т.к. многие уже использовали старый стандарт.

Старый стандарт не надо ломать, его надо заменить с обратной совместимостью и это будет во всех отношениях правильно.
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: TImage

Сообщение vitaly_l » 27.05.2012 14:53:07

qivi писал(а):но и значительно быстрее работает сней.

qivi писал(а):Старый стандарт не надо ломать, его надо заменить с обратной совместимостью и это будет во всех отношениях правильно.


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

Дело Мастера БО...
Моих знаний - не хватит, чтобы заменить на новый стандарт.

Изначальный "баг" связан с кол-вом bit в подгружаемых изображениях...
Короче их(bit'ов) - должно быть одинаково.




.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

TImage

Сообщение Ustas » 06.06.2012 12:50:42

Скажите, как TImage проверить на наличие/отсутствия картинки?
Вариант
Код: Выделить всё
Image1.Picture = nil
или
Код: Выделить всё
Image1.Picture.Graphic = nil
не проходят.
Ustas
постоялец
 
Сообщения: 146
Зарегистрирован: 19.10.2009 14:58:10
Откуда: г.Муром

Re: TImage

Сообщение vitaly_l » 06.06.2012 12:57:21

Проверить высоту или ширину Bitmap... Если отлична от ноля значит... есть...
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: TImage

Сообщение Ustas » 06.06.2012 13:30:55

Спасибо, помогло.
Ustas
постоялец
 
Сообщения: 146
Зарегистрирован: 19.10.2009 14:58:10
Откуда: г.Муром

Re: TImage

Сообщение Ustas » 15.11.2016 11:57:35

Есть возможность узнать размер пропорционально вписанной в TImage картинки, не репльный размер, а получившийся?
Ustas
постоялец
 
Сообщения: 146
Зарегистрирован: 19.10.2009 14:58:10
Откуда: г.Муром

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 75

Рейтинг@Mail.ru
cron