--}}
Новая тема
Вы не можете создавать новые темы.
Т.к. вы неавторизованы на сайте. Пожалуйста назовите себя или зарегистрируйтесь.
Список тем

JPG-BMP

5
18
С друзьями на NN.RU
В социальных сетях
Поделиться
Serg101
05.01.2004
при конвертации стандартными средствами Delphi 6
JPG в BMP часть заголовка не перебрасывается а точне
в dpi пишется 0, че делать help!!!
dpi мне просто позарес нужно
Мысь
05.01.2004
Формат BMP не хранит данных о dpi.
Serg101
05.01.2004
как это не хранит?
когда инфу о dpi bmp-эшки я могу прочитать строчкой
with imRastr.Picture.Bitmap do begin
GetDIB(Handle, Palette, BitmapInfo, DIBS);
BitmapInfo.bmiHeader.biXPelsPerMeter
Serg101
05.01.2004
как это нет?
with imRastr.Picture.Bitmap do begin
GetDIB(Handle, Palette, BitmapInfo, DIBS);
BitmapInfo.bmiHeader.biXPelsPerMeter = dpmX
Мысь
05.01.2004
Объект и файловый формат - вообще разные вещи.
Serg101
06.01.2004
понимаю что разные но поделать с собой ничего не могу
я же говорю вот мер как прочитать biXPelsPerMeter для BMP файла мне бы хотелось также по простому прочитать и для JPG.
Мысь
06.01.2004
BitmapInfo касается не файла, а графического объекта (предназначенного, по идее, для печати, отсюда и поле dpi); не веришь мне - спроси на форуме Королевства Дельфи.
1020
07.01.2004
нафиг ты связался с этим дельфи? пользуй jpeglib и не имей проблем!
Serg101
08.01.2004
А где взять jpeglib? Если есть пришли. заранее благодарен.
1020
09.01.2004
не помню, поищи в нете, или возьми сорсы в дистрибутиве линуха, мож даже под виндой соберется :)
jushi
07.01.2004
Уж не знаю, как насчет dpi, не было необходимости, но jpeg-и легко открываются с помощью OleLoadPicture (как впрочем и не только jpeg-и) на выходе имеешь IPicture, далее, если это битмап, а не метафайл или иконка, то грузишь его в TBitmap, примерно следующим образом:

var ms: TMemoryStream;
  fs: TFileStream;
  fa, ma: TStreamAdapter;
  pic: IPicture;
  si, pt: Integer;
  bm: TBitmap;
begin
  result:= False;
  pic:= nil;
  si:= 0;
  ms:= TMemoryStream.Create;
  ma:= TStreamAdapter.Create(ms);
  fs:= TFileStream.Create(filename, fmOpenRead or fmShareDenyNone);
  fa:= TStreamAdapter.Create(fs);
  try
    if OleLoadPicture(fa, 0, True, IID_IPicture, pic) = S_OK then begin
      if (pic.SaveAsFile(ma, True, si) = S_OK) and (si > 0) then begin
        ms.Seek(0, soFromBeginning);
        pic.get_Type(pt);
        if pt = PICTYPE_BITMAP then begin
          bm:= TBitmap.Create;
          bm.LoadFromStream(ms);
          result:= True;
        end;
      end;
    end;
  finally
    ma.Free;
    ms.Free;
    fs.Free;
  end;

При этом по идее, все должно передаться, однако, если не так, то можно попробовать следующее: у IPicture получить высоту и ширину в химетриках, а зная высоту и ширину битмапа в пикселях (после загрузки в TBitmap), можно определить dpi. Не факт, что сработает, просто идея... Кстати, а зачем тебе dpi? Может так и работать с химетриками? IPicture и рендерить себя умеет...
Serg101
08.01.2004
Отлично то что нужно , но есть один вопрос
OleLoadPicture(fa, 0, True, IID_IPicture, pic)
выдает ошибку несоответствия типов fa - TStreamAdapter
а надо IStream с этим как быть?
jushi
08.01.2004
Хм, что-то странная у тебя ошибка. TStreamAdapter как раз и создан был для того, чтобы дельфовые TStream приводик к мелкомягким IStream. Должно работать. У меня по крайней мере точно этот код работает но в Delphi 7.
jushi
09.01.2004
Я тут подумал, может он у тебя совсем не на то ругается? Потому что вообще-то IID_IPicture не прописан нигде в Дельфах. Я его добавлял константой сам, хотя можно просто поставить IPicture без IID_.
Serg101
15.01.2004
напиши какие модули подключал может в Delphi 6 их нет
jushi
15.01.2004
Вот все объявления, больше ничего не надо:

uses Messages, Windows, SysUtils, Classes, Controls, StdCtrls, Graphics, ExtCtrls, ActiveX, Buttons, Dialogs, ExtDlgs, ComCtrls, CommCtrl;

const
IID_IPicture: TGUID = (D1:$7BF80980;D2:$BF32;D3:$101A;D4:($8B,$BB,$00,$AA,$00,$30,$0C,$AB));
{$EXTERNALSYM PICTYPE_UNINITIALIZED}
PICTYPE_UNINITIALIZED = -1;
{$EXTERNALSYM PICTYPE_NONE}
PICTYPE_NONE = 0;
{$EXTERNALSYM PICTYPE_BITMAP}
PICTYPE_BITMAP = 1;
{$EXTERNALSYM PICTYPE_METAFILE}
PICTYPE_METAFILE = 2;
{$EXTERNALSYM PICTYPE_ICON}
PICTYPE_ICON = 3;
{$EXTERNALSYM PICTYPE_ENHMETAFILE}
PICTYPE_ENHMETAFILE = 4;
Serg101
15.01.2004
щас проверю
Serg101
15.01.2004
Спасибо заработало.
Новая тема
Вы не можете создавать новые темы.
Т.к. вы неавторизованы на сайте. Пожалуйста назовите себя или зарегистрируйтесь.
Список тем
Последние темы форумов
Форум Тема (Автор) Последний ответ Ответов
Оперативная память Corsair XMS3 CMX8GX3M2A1600C9

Оперативная память Corsair XMS3 CMX8GX3M2A1600C9 Отправка в регионы после оплаты. Продаются сразу обе. Цена за обе 2000 руб....
Цена: 1 000 руб.

Принтер лазерный HEWLETT PACKARD HP-6L

Принтер лазерный HEWLETT PACKARD HP-6L Отправка в регионы после оплаты. 3штуки БУ. Внешний вид из магазина простояли на складе...
Цена: 4 500 руб.

Сетевой фильтр APC Surge Arrest

Сетевой фильтр APC Surge Arrest для радиолюбителя.и не только Отправка в регионы после оплаты. ЦЕНА 3000 руб. В рабочем состоянии....
Цена: 3 000 руб.

Материнские платы на запчасти и не только

Материнские платы на запчасти и не только Материнские платы и другие комплектующие Отправка в регионы после оплаты. Транспортной...
Цена: 3 000 руб.