|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
25.09.2008, 14:14 | #1 |
Пользователь
Регистрация: 25.09.2008
Сообщений: 10
|
PSD в ICO
Доброго времени суток!
Может кто-то сталкивался с такой проблемой: нужно *.psd-файл сконвертировать в *.ico (с учетом альфа-канала). Хелп плиз З.Ы. Статью М.Фленова не предлагать - тераяет альфа-канал. |
25.09.2008, 15:09 | #2 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
почти что аналогия темы bmp в ico. если умеите вытягивать из psd битовые данные то записываем их в битмап и заливаем в ico ( юзаем gdi+ ) с ней все просто
|
29.09.2008, 09:19 | #3 |
Пользователь
Регистрация: 25.09.2008
Сообщений: 10
|
> заливаем в ico ( юзаем gdi+ )
Вован13, можно поподробнее? может пример есть? |
29.09.2008, 09:35 | #4 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Качаем и ищим модуль GDIPAPI + если найдете нужный то придется скачать еще ( Clootie_DirectX92_Apr07.exe у меня так называется ). Когда все нашли поставили, пишем код:
1. Создать битмап - GdipCreateBitmapFromScan0(.... кажется так, Stride = Width * ( тут кол-во бит деленное на 8 ). Так вот Scan0 это и есть ваши данные битовые, в PixelFormat указываите как они там хранятся... Все создали GpBitmap объект 2. Не помню как называется но есть функция Gdip... типа SaveToFile чтоли в ней указываите имя файла куда записать, а в формат выбираите ICO вот и все, поидеи должно сработать. |
29.09.2008, 11:11 | #5 |
Пользователь
Регистрация: 25.09.2008
Сообщений: 10
|
Делаю так:
GBM := TGPBitmap.Create; GBM.FromFile('46-48_with_alpha_vamp.bmp'); GBM.Save('out.ico',G); В методе Save второй параметр типа TGUID. Это что? |
29.09.2008, 11:15 | #6 |
Пользователь
Регистрация: 25.09.2008
Сообщений: 10
|
Все, понял. Сделал
const G: TGUID = '{00000002-0000-0000-C000-000000000046}'; Но сохранение не работает. Файл не создается |
29.09.2008, 20:25 | #7 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
const
G: TGUID = '{00000002-0000-0000-C000-000000000046}'; Это что ? Там есть стандартные uid'ы для каждого из форматов !!! Смотрите внимательней |
30.09.2008, 09:38 | #8 |
Пользователь
Регистрация: 25.09.2008
Сообщений: 10
|
Стандартные uid'ы:
* 'image/bmp' * 'image/jpeg' * 'image/gif' * 'image/tiff' * 'image/png' Т.е. сохранение в ico невозможно. Даже если сделать GBM.Save('out.ico'), то полученный файл будет bmp-файлом с расширением ico |
30.09.2008, 10:08 | #9 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
А вот у меня есть ( я же говорил, если скачаите тот что нужно )
Код:
|
03.10.2008, 15:29 | #10 |
Пользователь
Регистрация: 25.09.2008
Сообщений: 10
|
Вы не могли бы написать простейший пример сохранения, например, из TImage, расположенного на форме. я Делаю так:
procedure TForm1.gdiClick(Sender: TObject); const G: TGUID = '{b96b3cb5-0728-11d3-9d7b-0000f81ef32e}'; var PSD: TPSDFileFormat; ImArr: TDynImageDataArray; Filejpg: TGPImage; //Класс GDI+ обеспечивающий загрузку и сохранение изображений mem: TMemoryStream; //Поток в памяти, который будет получать Битмап aptr: IStream; //Интерфейс который будет реализован при помощи TStreamAdapter encoderClsid: TGUID; //GUID - класса изображений n: Int64; Bitmap: TBitmap; imgFile : TGPImage; imgtype : WideString; encoderParameters: TEncoderParameters;//задает параметры енкодера (в данном случае //используется для того чтобы задать степеь сжатия jpeg) param : ULONG; begin mem := TMemoryStream.Create; Bitmap.SaveToStream(mem);//Загружаем битмап в поток image1.Picture.Bitmap.Assign(Bitmap ); mem.Seek(0, soFromBeginning);//устанавливаем позицию потока в начало aptr := TStreamAdapter.Create(mem, soReference) as IStream; imgFile := TGPImage.Create(aptr); imgFile.Save('out.ico', G);//если используем дефолтные настройки то //encoderParameters просто не передаем. imgFile.Free; aptr := nil; mem.Free; end; - ничего не получается Создается ПУСТОЙ *.ico-файл. |