FreeImage: конвертация BMP -> JPG

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3291
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

FreeImage: конвертация BMP -> JPG

Сообщение Дед Пахом »

По условию задачи мне надо сохранить bmp-файл как jpg. Вот код:

Код: Выделить всё

BmpClass.SaveAs     PROCEDURE(STRING pFile)
fif                   FREE_IMAGE_FORMAT
dib                   LPFIBITMAP
saveAsFile            CSTRING(256)

bOK                   BOOL(FALSE)

  CODE
  saveAsFile = PATH() & '\' & CLIP(pFile)

  fif = FreeImage_GetFIFFromFilename(self.FileName);
  dib = FreeImage_Load(fif, self.FileName)
  IF dib = 0
    self.ErrorHandler('Failed loading')
    RETURN
  END
  
  IF FreeImage_FIFSupportsWriting(fif) AND FreeImage_FIFSupportsExportBPP(fif, FreeImage_GetBPP(dib))

    fif = FreeImage_GetFIFFromFilename(saveAsFile);
  
    bOK = FreeImage_Save(fif, dib, saveAsFile)
    IF NOT bOK
      message('Failed saving')
      self.ErrorHandler('Failed saving')
    END

    FreeImage_Unload(dib)
  ELSE
    STOP('error')
  END
Код вроде рабочий, конвертит bmp во всё что угодно (png, tiff...). Во всё, кроме jpg! FreeImage_Save('image.jpg') возвращает 0, файл image.jpg создаётся, но он пустой. Никто не сталкивался?
С уважением, ДП
seawolf
Старожил
Сообщения: 217
Зарегистрирован: 08 Июль 2005, 11:23
Откуда: St. Petersburg

Re: FreeImage: конвертация BMP -> JPG

Сообщение seawolf »

У меня есть аналогичное преобразование из PNM в BMP с рихтовкой на 300 точек по дороге, работает без проблем довольно давно (смотри внизу). Также где-то был кусок где в загруженное в память bmp там -же в памяти преобразуется в Jpg и вставляется в blob (без сохранения на диск промежуточнывх файлов)

pImage = FreeImage_Load(RETFIF,PATH_PNM,0)
If pImage <> 0
bWidth = FreeImage_GetWidth(pImage)
bHeight = FreeImage_GetHeight(pImage)
FreeImage_SetDotsPerMeterX(pImage,11811)
FreeImage_SetDotsPerMeterY(pImage,11811)
bResult = FreeImage_Save(FIF_BMP,pImage,PATH_BMP,0)
.

вот нашел в jpg из bmp но в памяти

hMem1 - ссылка на Bmp в памяти

cbImage = GlobalSize(hMem1)
lpBuffer = GlobalLock(hMem1)
If lpBuffer <> 0
fihMemory = FreeImage_OpenMemory(lpBuffer, cbImage)
IF fihMemory <> 0
fif = FreeImage_GetFileTypeFromMemory(fihMemory, 0)
If fif <> FIF_UNKNOWN And FreeImage_FIFSupportsReading(fif)
pImage = FreeImage_LoadFromMemory(fif, fihMemory, LoadOption)
If pImage
hMem2 = FreeImage_OpenMemory()
If hMem2
If FreeImage_SaveToMemory(FIF_JPEG,pImage,hMem2,0) = true
mem_buffer = 0; size_in_bytes = 0
If FreeImage_AcquireMemory(hMem2, mem_buffer, size_in_bytes) = True
?Image2{PROP:ImageBlob} = mem_buffer
. .
.
FreeImage_CloseMemory(hMem2)
FreeImage_UnLoad(pImage)
.
.
FreeImage_CloseMemory(fihMemory)
.
.
GlobalUnlock(hMem1)
GlobalFree(hMem1)
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3291
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Re: FreeImage: конвертация BMP -> JPG

Сообщение Дед Пахом »

Спасибо огромное. Всё дело (видимо) в том, что bmp получается 32 bits per pixel, и в jpg такой имидж почему-то не конвертится. Сделал bmp 24 bits per pixel, всё ok.
С уважением, ДП
Ответить