Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.05.08;
Скачать: CL | DM;

Вниз

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 вся ветка

Текущий архив: 2011.05.08;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.003 c
2-1296575178
mephisto
2011-02-01 18:46
2011.05.08
TList<string> vs. TStrings


15-1295420292
12
2011-01-19 09:58
2011.05.08
Ищу. Софтину. Простой и надежный удаленный доступ.


2-1296587747
Тимоха111
2011-02-01 22:15
2011.05.08
копировать массив в другой массив


1-1253459003
kiki
2009-09-20 19:03
2011.05.08
Top Most


15-1295351568
начинающий2
2011-01-18 14:52
2011.05.08
как можно создать такой класс?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский