Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.09.2008, 14:14   #1
vinni
Пользователь
 
Регистрация: 25.09.2008
Сообщений: 10
По умолчанию PSD в ICO

Доброго времени суток!
Может кто-то сталкивался с такой проблемой: нужно *.psd-файл сконвертировать в *.ico (с учетом альфа-канала). Хелп плиз
З.Ы. Статью М.Фленова не предлагать - тераяет альфа-канал.
vinni вне форума Ответить с цитированием
Старый 25.09.2008, 15:09   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

почти что аналогия темы bmp в ico. если умеите вытягивать из psd битовые данные то записываем их в битмап и заливаем в ico ( юзаем gdi+ ) с ней все просто
BOBAH13 вне форума Ответить с цитированием
Старый 29.09.2008, 09:19   #3
vinni
Пользователь
 
Регистрация: 25.09.2008
Сообщений: 10
По умолчанию

> заливаем в ico ( юзаем gdi+ )
Вован13, можно поподробнее? может пример есть?
vinni вне форума Ответить с цитированием
Старый 29.09.2008, 09:35   #4
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Качаем и ищим модуль GDIPAPI + если найдете нужный то придется скачать еще ( Clootie_DirectX92_Apr07.exe у меня так называется ). Когда все нашли поставили, пишем код:
1. Создать битмап - GdipCreateBitmapFromScan0(.... кажется так, Stride = Width * ( тут кол-во бит деленное на 8 ). Так вот Scan0 это и есть ваши данные битовые, в PixelFormat указываите как они там хранятся... Все создали GpBitmap объект
2. Не помню как называется но есть функция Gdip... типа SaveToFile чтоли в ней указываите имя файла куда записать, а в формат выбираите ICO вот и все, поидеи должно сработать.
BOBAH13 вне форума Ответить с цитированием
Старый 29.09.2008, 11:11   #5
vinni
Пользователь
 
Регистрация: 25.09.2008
Сообщений: 10
По умолчанию

Делаю так:
GBM := TGPBitmap.Create;
GBM.FromFile('46-48_with_alpha_vamp.bmp');
GBM.Save('out.ico',G);
В методе Save второй параметр типа TGUID. Это что?
vinni вне форума Ответить с цитированием
Старый 29.09.2008, 11:15   #6
vinni
Пользователь
 
Регистрация: 25.09.2008
Сообщений: 10
По умолчанию

Все, понял. Сделал
const
G: TGUID = '{00000002-0000-0000-C000-000000000046}';

Но сохранение не работает. Файл не создается
vinni вне форума Ответить с цитированием
Старый 29.09.2008, 20:25   #7
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

const
G: TGUID = '{00000002-0000-0000-C000-000000000046}';

Это что ? Там есть стандартные uid'ы для каждого из форматов !!! Смотрите внимательней
BOBAH13 вне форума Ответить с цитированием
Старый 30.09.2008, 09:38   #8
vinni
Пользователь
 
Регистрация: 25.09.2008
Сообщений: 10
По умолчанию

Стандартные uid'ы:
* 'image/bmp'
* 'image/jpeg'
* 'image/gif'
* 'image/tiff'
* 'image/png'
Т.е. сохранение в ico невозможно. Даже если сделать GBM.Save('out.ico'), то полученный файл будет bmp-файлом с расширением ico
vinni вне форума Ответить с цитированием
Старый 30.09.2008, 10:08   #9
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

А вот у меня есть ( я же говорил, если скачаите тот что нужно )
Код:
ImageFormatIcon      : TGUID = '{b96b3cb5-0728-11d3-9d7b-0000f81ef32e}';
  {$EXTERNALSYM ImageFormatIcon}
BOBAH13 вне форума Ответить с цитированием
Старый 03.10.2008, 15:29   #10
vinni
Пользователь
 
Регистрация: 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-файл.
vinni вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц