Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2011.05.08;
Скачать: [xml.tar.bz2];

Вниз

TOleGraphic изменяет оригинальный размер GIFa?   Найти похожие ветки 

 
miox ©   (2008-05-28 07:44) [0]

Вот уже долгое время бьюсь над проблемой - надеюсь здесь мне помогут.

Мспользую TOleGraphic для загрузки в TImage изображений формата gif и jpg. Вот таким вот методом.

var
infs : TMemoryStream;//
s:string;
w,h,r : integer;
picture : TOleGraphic;
bitmap:TBitmap;
begin
   picture := TOleGraphic.create;
   bitmap:=TBitmap.Create;
   try
     infs:=TMemoryStream.Create;
     infs.Clear ;
     infs.LoadFromFile(filepic);
     picture.LoadFromStream(штfs);
     bitmap.Width:=picture.Width;
     bitmap.Height:=picture.Height;
     StatusBar1.Panels[0].Text := p.W="+InttoSTr(picture.Width) + " p.H="+InttoSTr(picture.Height);
     bitmap.Canvas.Draw(0, 0, picture);
     Image1.Picture.Bitmap := bitmap;
   finally
     FreeAndNil(picture);
     FreeAndNil(bitmap);
     infs.Free;
   end;
end;

По какой то причине размер изображения загруженый из потока в picture меньше примерно на 20% (по свойствам hight/width и визуально также заметно) чем оригинальное изображение. В результате изображение несколько искажается да и вообще мне надо чтоб выводилось оригинальное.
Пробовал сохранять из потока в файл - этот файл нормальный - значит в потоке нормальный размер. Выходит TOleGraphic глючит или что? Может у меня где то ошибка?
Как побороть?

Сторонние компоненты не предлагать это уже напоследок.

Спасибо заранее.
miox


 
Palladin ©   (2008-05-28 15:38) [1]

для jpeg, все работает прекрасно если сделать uses jpeg; для gif, можно выкорчевать модуль из RxLib

а то, что ты привел, явно не то, что на самом деле


 
miox ©   (2008-05-28 15:56) [2]

Palladin, на самом деле работаю с GIF. А с JPEG и родные компоненты винды работают (во всяком случае то что мне нужно это просто отобразить на экране оригинальное изображение).

Кстати доп. информация. Размер выводимой картинки (hight/width) зависит от разрешения экрана. При большом разрешении возможна ситуация когда hight/width загруженной картинки даже больше чем оригинальные размеры. Закономерности не увидел никакой.
Что за фигня!

ЗЫ
Так неохота в winAPI ковырятся. :(


 
Sapersky   (2008-05-28 16:34) [3]

http://delphimaster.net/view/15-1211878733/
Лично я получал размеры так:
   Picture.get_Width(w); Picture.get_Height(h);
   DC := CreateCompatibleDC(0);
   B.bmWidth  := MulDiv(w, GetDeviceCaps(DC, LOGPIXELSX), 2540);
   B.bmHeight := MulDiv(h, GetDeviceCaps(DC, LOGPIXELSY), 2540);
   DeleteDC(DC);
Наверное, CreateCompatibleDC правильнее чем GetDC(0), которая используется в TOleGraphic, во всяком случае, зависимости размера от разрешения не припомню.
Или, как вариант, Picture.get_Handle(hBmp), затем GetObject.

А вообще есть хороший компонент TGifImage.


 
miox ©   (2008-05-29 10:44) [4]

Sapersky, вы правы - так действительно размеры какие надо. Выходит это TOleGraphics кривой?
Чтож бум копаться в winAPI.
Спасибо.



Страницы: 1 вся ветка

Форум: "Media";
Текущий архив: 2011.05.08;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.004 c
2-1296050681
ZV
2011-01-26 17:04
2011.05.08
Преобразование Byte в Word?


15-1295739103
Грамотей
2011-01-23 02:31
2011.05.08
Где взять скомпилированные dll от ODE?


2-1296232735
bagos
2011-01-28 19:38
2011.05.08
Передача данных между программами


15-1295645386
Юрий
2011-01-22 00:29
2011.05.08
С днем рождения ! 22 января 2011 суббота


2-1295938268
Василий21
2011-01-25 09:51
2011.05.08
Таймер чужой программы и HOOK





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский