|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Конвертировать PNG ColorType из COLOR_PALETTE
Не могу найти нормально работающего примера, чтобы качественно увеличить PNG с alpha-каналом.
Delphi XE2 На сайте абракадабры (EDN>>CodeCentral) есть примеры работы с PNG: http://cc.embarcadero.com/Item/25631, в том числе и есть пример процедуры SmoothResize. Там есть такой кусок кода: Код:
if not (apng.Header.ColorType in [COLOR_RGBALPHA, COLOR_RGB]) then raise Exception.Create('Only COLOR_RGBALPHA and COLOR_RGB formats' + ' are supported'); Проблема в том, что у меня изображение имеет apng.Header.ColorType равный 3, а именно COLOR_PALETTE Код:
unit Vcl.Imaging.pngimage; ... .... {Avaliable color modes for PNG} COLOR_GRAYSCALE = 0; COLOR_RGB = 2; COLOR_PALETTE = 3; COLOR_GRAYSCALEALPHA = 4; COLOR_RGBALPHA = 6; поэтому вываливается Exception Я с изображениями вообще не работал. Поэтому нужна процедура изменения размера PNG. Или как "конвертировать" существующее изображение, чтобы эта процедура схавала мой png и не подавилась? Может можно как сконвертировать изображение из COLOR_PALETTE в COLOR_RGBALPHA или в COLOR_RGB? |
#2
|
||||
|
||||
GDI+ пробовал?
Пишу программы за еду. __________________ |
#3
|
|||
|
|||
Нет.
Попробую, если найду нормальный рабочий готовый пример. |
#4
|
||||
|
||||
попробуй это:
-просто запустить "Project1.exe" -масштабирует в 2 раза файл "Google.png" (в одном каталоге с программой) -результат файл "Google+.png" Пишу программы за еду. __________________ |
#5
|
|||
|
|||
Работает как надо.
Но готовый примерчик бы поиметь вместо exe |
#6
|
|||
|
|||
Нашёл вот такой код
Код:
uses GDIPAPI, GDIPOBJ,GDIPUTIL; procedure TForm11.Button1Click(Sender: TObject); var in_img, out_img: TGPImage; g: TGPGraphics; out_width, out_height: Integer; sclx:extended; fname:string; encoderClsid: TGUID; begin fname:='D:\test.png'; out_width := 450; in_img := TGPImage.Create(fname); sclx:=450/in_img.GetWidth; if sclx <> 1 then begin out_height := round(in_img.GetHeight*sclx); out_img := TGPBitmap.Create(out_width, out_height); g := TGPGraphics.Create(out_img); g.DrawImage(in_img, MakeRect(0, 0, out_width, out_height), 0, 0, in_img.GetWidth, in_img.GetHeight, UnitPixel); g.Destroy; in_img.Free; //иначе надо сохранять не в (fname) а (NOTfname) GetEncoderClsid('image/png', encoderClsid); out_img.Save(fname, encoderClsid); end; end; тестирую |
#7
|
|||
|
|||
Цитата:
Можно на Ваш код глянуть? Можно ли в нём работать не через файл? Мне нужно работать без физического файла. Я скачиваю из интернета картинку и увеличиваю размер, затем записываю TMemoryStream в базу. |
#8
|
|||
|
|||
Практически такая-же проблема. Использую TPNGObject (другого не предлагать).
Скачивается файл .png с ColorType COLOR_PALETTE. Нужно обращаться к Alpha-пикселям, но при AlphaScanline появляется ошибка. Есть ли какие-то способы перевести ColorType в COLOR_RGBALPHA? |
#9
|
||||
|
||||
В старых версиях Дельфи PNGObject, в новых PNGImage.
Код:
var png, png_a : TPNGImage; procedure TForm4.FormCreate(Sender: TObject); begin png := TPNGImage.Create; png.LoadFromFile('bud256.png'); png_a := TPNGImage.CreateBlank(COLOR_RGBALPHA, 8, png.Width, png.Height); png_a.Assign(png); png_a.SaveToFile('bud256_A.png'); end; другой вариант: Код:
Image1.Picture.LoadFromFile('bud256.png'); png := TPNGImage.Create; png.LoadFromFile('bud256.png'); png.CreateAlpha; png.TransparentColor := clWhite; png.SaveToFile('bud256_A.png'); Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. Последний раз редактировалось angvelem, 15.08.2012 в 03:42. |
#10
|
|||
|
|||
Цитата:
см. эту тему http://forum.vingrad.ru/forum/topic-354907.html там есть готовые процедуры и функции, примеры |