Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > PNG ???????????????


Автор: WaReZMEN 4.9.2007, 06:55
Вообщем ситуация такая почитал я про PNG поробовал все ок но есть вопросы:
1. Цвет изображения
Код

Desktop:=TCanvas.Create;
 try
  with Desktop do
   Handle := GetWindowDC(GetDesktopWindow);
   with B.Canvas do
    begin
     CopyRect (Rect (0, 0, w, h),        DeskTop,           Rect (0, 0, w, h));
     Draw(Kursor.x,Kursor.y,Image1.Picture.Graphic);
    end;

  PNG := TPNGObject.CreateBlank(COLOR_PALETTE, 1, B.Width, B.Height);
  PNG.Assign(B);
  PNG.SaveToFile(ExtractFilePath(Application.ExeName)+'\'+temp.png');

как я прочел в хелпе чтоб сделать серую картинку нужно вместо COLOR_PALETTE поставить COLOR_GRAYSCALE. Но почемуто не работает. Может это потому что я пихаю туда уже цветную картинку???

2. Как сделать 256 цветов и 16 бит. чтоб в фаил записывалось? Или тут тоже все из за-того что я пытаюсь саписать в картинку?

3.  Есть ли возможность еще сжать картинку чтоб меньше весила? (CompressionLevel уже пробовал... )


M
Alexeis
Модератор: Название темы должно отражать ее суть!

Автор: Alexeis 4.9.2007, 10:45
  Не думаю, что компонент умеет сам конвертировать форматы. Скорее всего ему нужно дать битмапку в соответствующем формате. 
  PNG - плохо сжимает изображения фотографического качества. Хорошего результата можно добиться только для формата 256 цветов с специально подобранной палитрой.

Автор: Snowy 4.9.2007, 11:04
Делая Assing, ты автоматом уничтожаешь существующую картинку и создаёшь новую из битмапа.
Естественно она уже не серая, а имеет палитру битмапа.
Менять палитру нужно уже у подгруженного изображения.

Автор: WaReZMEN 5.9.2007, 00:03
С этим я разобрался для все кто незнает как я дописал к выше преведенному коду
 B.PixelFormat := pf4bit ... И еще вопрос как скалит изображение?

Автор: Snowy 5.9.2007, 10:53
Из одного битмапа рисуешь на другой через StretchDraw

Автор: WaReZMEN 5.9.2007, 12:29
Ок спс!!!!

Автор: s-mike 5.9.2007, 14:08
Цитата(Alexeis @  4.9.2007,  10:45 Найти цитируемый пост)
  PNG - плохо сжимает изображения фотографического качества. Хорошего результата можно добиться только для формата 256 цветов с специально подобранной палитрой. 

Ты с GIF не перепутал?

Автор: Alexeis 5.9.2007, 14:33
Цитата(s-mike @  5.9.2007,  14:08 Найти цитируемый пост)
Ты с GIF не перепутал? 

  С GIF я не мог перепутать так как в Gif 24 битного цвета нет. Ну ладно пусть не так уж плохо, но все равно не так хорошо как jpeg. Это известный факт проверенный многими, да и я сам проверял, так что не стоит тут даже обсуждать.

Автор: Snowy 5.9.2007, 14:42
Цитата(Alexeis @  5.9.2007,  14:33 Найти цитируемый пост)
 Это известный факт проверенный многими, да и я сам проверял, так что не стоит тут даже обсуждать.
Для скриншотов png даёт более высокий результат при более высоком качестве.
Скриншот - не фотография.
Много сплошных участков, которые отлично зипятся.
Джпег лучше для разнородных данных. А с однородными png справляется лучше и без потери качества.

Автор: WaReZMEN 6.9.2007, 07:48
Народ а StretchDraw(); почемуто не работает :( Мне нужно чтоб картинку с 1027х768 сделал 800х600
тоесть в параметрах функций пишу StretchDraw(rect(0,0,800,600),Исходная картинка). Врезультате он мне просто отрезает всю остальную картинку а не масштабирует .... как быть?

Автор: Snowy 6.9.2007, 10:37
Значит неверные параметры передаёшь стретчу.
Покажи код.
Или вот тебе пример: http://forum.vingrad.ru/index.php?showtopic=80671&view=findpost&p=866002

Автор: WaReZMEN 7.9.2007, 00:07
Все ошибку устранил правда так и не понял почему она была 
у меня ьыло написано 
Код

    Image1.Canvas.StretchDraw(Rect(0,0,800,600),Bitmap);


Заменил на
Код

     Image1.Canvas.StretchDraw(Rect(0,0,Image1.Width,Image1.Height),Bitmap);


И все заработало smile  smile 

Автор: s-mike 7.9.2007, 16:25
Цитата(Alexeis @ 5.9.2007,  14:33)
Цитата(s-mike @  5.9.2007,  14:08 Найти цитируемый пост)
Ты с GIF не перепутал? 

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

По моему сравнивать тут нечего. PNG обеспечивает беспотерьное сжатие, в отличие от JPEG. PNG можно сравнивать с BMP (RLE), TIFF, TGA, PCX.

А вот какое сжатие нужно — с потерями или без, зависит от конкретного случая.
Цитата

Все ошибку устранил правда так и не понял почему она была 

А какие размеры Image?

Автор: WaReZMEN 10.9.2007, 08:38
800 на 600

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)