Mic |
Отправлено: 24.05.2003, 15:37 |
|
Не зарегистрирован
|
Существует ли компонента или алгоритм перевода графического файла tiff, jpg, gif и т. д. в формат BMP?
На языке Java есть функция Grabber(), есть ли что то аналогичное на СИ++? |
|
Admin |
Отправлено: 24.05.2003, 16:18 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Самое простое — использовать компонент Image:
CODE |
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Image1->Picture->LoadFromFile("c:\\MyPicture.gif");
Image1->Picture->SaveToFile("c:\\MyPicture.bmp");
}
|
Но с форматом tif так вряд-ли получится
----
Компоненты преобразования графических форматов смотри тут:
http://torry.torry.net/conversion.htm
----
Очень хорошие компоненты, работающие с форматом tif — LeadTools
|
|
Grigoriy |
Отправлено: 11.03.2006, 05:43 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
Конвентор jpeg формата.
Я скачал с сайта http://www.wotsit.org.
Там много документов по форматам файлов.
Только на английском языке.
|
|
MarcusCaesar |
Отправлено: 22.03.2006, 23:16 |
|
Не зарегистрирован
|
Как вариант, предлагаю использовать библиотеку GDI+
У нее имеется отличный класс Bitmap, позволяющий, помимо всего прочего, загружать и сохранять изображения разных форматов (BMP, JPG, TIF, GIF и PNG) с любым направлением загрузка->сохранение.
Подробности см. на сайте RSDN Часть2. Работа с растрами и графическими файлами |
|
Grigoriy |
Отправлено: 15.04.2006, 20:04 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
QUOTE (MarcusCaesar @ 22/03/2006, 23:16) | Как вариант, предлагаю использовать библиотеку GDI+
|
ЗДРАВСТВУЙ, ФОРУМ !
Как мне было вас жалко.
Как вас давно не было в интернете !
Идите все сюда.
Форум снова работает.
Да. Я изучаю библиотеку GDI+.
Но изучаю ее особо...
Дело в том, что я пытаюсь до конца разобраться с тем как использовать её функции напрямую.
Мне это удается.
Но часто возникают ошибки, которые я потом понимаю и думаю
"Ах да ! Так, я же ошибся..."
Я понимаю мнение тех, кто считает, что через классы легче работать с этой библиотекой, но я буду пытаться с ней взаимодействовать на АССЕМБЛЕРЕ FASM. И напишу на FASM маленькую DLL, которая мне особо нужна и должна она быть именно маленькой, а делать то что нужно.
И ещё, мне непонравилось одна особенность этой библиотеки.
При сохранении изображения bitmap в файл при использовании Энкодера BMP нельзя повлиять на формат сохраняемого BMP-файла.
То бишь, если bitmap был изначально порожден от файла, в котором изображение кодировалось в формате пиксела
PixelFormat8bppIndexed
то когда это изображение сохраняется в BMP-файл, то BMP-файл может быть только 8-битным, хотя при вызове подпрограммы сохранения этой библиотеки один из параметров хранит адрес структуры с режимами сохранения. Я напишу
CODE |
GdipSaveImageToFile(GpImage *image, GDIPCONST WCHAR* filename,
GDIPCONST CLSID* clsidEncoder,
GDIPCONST EncoderParameters* encoderParams);
class EncoderParameters
{
public:
UINT Count; // Number of parameters in this structure
EncoderParameter Parameter[1]; // Parameter values
};
class EncoderParameter
{
public:
GUID Guid; // GUID of the parameter
ULONG NumberOfValues; // Number of the parameter values
ULONG Type; // Value type, like ValueTypeLONG etc.
VOID* Value; // A pointer to the parameter values
};
Guid принимает одно из значений
DEFINE_GUID(EncoderCompression, 0xe09d739d,0xccd4,0x44ee,0x8e,0xba,0x3f,0xbf,0x8b,0xe4,0xfc,0x58);
DEFINE_GUID(EncoderColorDepth, 0x66087055,0xad66,0x4c7c,0x9a,0x18,0x38,0xa2,0x31,0x0b,0x83,0x37);
DEFINE_GUID(EncoderScanMethod, 0x3a4e2661,0x3109,0x4e56,0x85,0x36,0x42,0xc1,0x56,0xe7,0xdc,0xfa);
DEFINE_GUID(EncoderVersion, 0x24d18c76,0x814a,0x41a4,0xbf,0x53,0x1c,0x21,0x9c,0xcc,0xf7,0x97);
DEFINE_GUID(EncoderRenderMethod, 0x6d42c53a,0x229a,0x4825,0x8b,0xb7,0x5c,0x99,0xe2,0xb9,0xa8,0xb8);
DEFINE_GUID(EncoderQuality, 0x1d5be4b5,0xfa4a,0x452d,0x9c,0xdd,0x5d,0xb3,0x51,0x05,0xe7,0xeb);
DEFINE_GUID(EncoderTransformation,0x8d0eb2d1,0xa58e,0x4ea8,0xaa,0x14,0x10,0x80,0x74,0xb7,0xb6,0xf9);
DEFINE_GUID(EncoderLuminanceTable,0xedb33bce,0x0266,0x4a77,0xb9,0x04,0x27,0x21,0x60,0x99,0xe7,0x17);
DEFINE_GUID(EncoderChrominanceTable,0xf2e455dc,0x09b3,0x4316,0x82,0x60,0x67,0x6a,0xda,0x32,0x48,0x1c);
DEFINE_GUID(EncoderSaveFlag,0x292266fc,0xac40,0x47bf,0x8c, 0xfc, 0xa8, 0x5b, 0x89, 0xa6, 0x55, 0xde);
DEFINE_GUID(CodecIImageBytes,0x025d1823,0x6c7d,0x447b,0xbb, 0xdb, 0xa3, 0xcb, 0xc3, 0xdf, 0xa2, 0xfc);
ячейка памяти по адресу
GDIPCONST CLSID* clsidEncoder
принимает одно из значений
DEFINE_GUID(ImageFormatBMP, 0x557cf400,0x1a04,0x11d3,0x9a,0x73,0x00,0x00,0xf8,0x1e,0xf3,0x2e);
DEFINE_GUID(ImageFormatJPEG, 0x557cf401,0x1a04,0x11d3,0x9a,0x73,0x00,0x00,0xf8,0x1e,0xf3,0x2e);
DEFINE_GUID(ImageFormatPNG, 0x557cf406,0x1a04,0x11d3,0x9a,0x73,0x00,0x00,0xf8,0x1e,0xf3,0x2e);
DEFINE_GUID(ImageFormatGIF, 0x557cf402,0x1a04,0x11d3,0x9a,0x73,0x00,0x00,0xf8,0x1e,0xf3,0x2e);
DEFINE_GUID(ImageFormatTIFF, 0x557cf405,0x1a04,0x11d3,0x9a,0x73,0x00,0x00,0xf8,0x1e,0xf3,0x2e);
|
Но при сохранении в формате JPEG влияют только параметры сохранения
Трансформация 13 14 15 16 17
Квалитет (0...100)
И при сохранении в формате TIFF влияют только
метод компресии 2 3 5 4 6
количество бит на пиксел 1 4 8 24 32
А во всех остальных форматах и все остальные параметры не влияют.
|
|
|