C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Преобразовать рисунок .png в .bmp, как сделать или компонент ???
** pasha
Отправлено: 05.07.2005, 11:59


Не зарегистрирован







Очень мало приходилось работать с графикой.

А теперь встала задача:
есть графические файлы формата .png (родной для Linux) нужно их:

1. преобразовать из .png в любой формат — .bmp .gif .jpg
2. заменить все точки черного цвета на белый.
( там фон — черный, а нужно печатать на принтере -
расход тонера будет — ohmy.gif то есть фон сделаю белым )

Что касается задания 2 — нашел функцию
function ChangeBitmapColor(Bitmap: TBitmap; Color, NewColor: TColor): TBitmap; которая это должна делать или самому вручную тоже
вроде не особо сложно.

По преобразованию в другой формат — что-то я не нашел в ВСВ 6
компонента или класса, который работает-понимает .png sad.gif

Как преобразовать .png в .bmp ???
Sl@Sh
Отправлено: 06.07.2005, 02:45


Мастер участка

Группа: Участник
Сообщений: 383



А вы в Билдере и не найдёте. У меня есть парочка модулей для работы с PNG. Один я использовал, а второй нет. Сперва выложу первый.
Скажу что он достаточно много может (начиная от изменения качества и до прорисовки альфа-каналов). Однако работает относительно медленно, хотя это зависит от постановки вашей задачи.

№1 :

User Attached Image Скачать файл
pngimage143.zip


Sl@Sh
Отправлено: 06.07.2005, 02:56


Мастер участка

Группа: Участник
Сообщений: 383



№2 :

User Attached Image Скачать файл
lpng125.zip


Valdemar
Отправлено: 06.07.2005, 07:07


Мастер участка

Группа: Участник
Сообщений: 433



На сайте http://www.xnview.com есть библиотека GFL SDK для работы с графическими файлами разных форматов. Думаю, что вам она подойдет.
olegenty
Отправлено: 06.07.2005, 07:08


Ветеран

Группа: Модератор
Сообщений: 2412



а вообще — прямо на этом сайте имеет место Image Lib
Admin
Отправлено: 06.07.2005, 15:41


Владимир

Группа: Администратор
Сообщений: 1190



Нашел библиотеку — бесплатная, попробовал — работает.

Всем — кому надо — собственно сама библиотека -
http://pngdelphi.sourceforge.net/

или она-же в прикрепленном файле ( версия 1.5 )
(если вдруг ссылка перестанет работать).

Скачиваете ее, распаковываете,
добавляете в Ваш проект файл pngimage.pas и компилите его,
генерятся нужные .hpp файлы:

QUOTE

Add pngimage.pas to your project and compile your program, the compiler creates a pngimage.hpp add this line:
#include "pngimage.hpp"
to the unit that contains the OpenPictureDialog.
that should do the trick !


Есть файл справки, как ею пользоваться, собственно все очень просто
(как и обычные .bmp и пр.)

CODE

Converting from Windows bitmap file to PNG file
This method loads a bitmap and saves it using png format

procedure BitmapFileToPNG(const Source, Dest: String);
var
 Bitmap: TBitmap;
 PNG: TPNGObject;
begin
 Bitmap := TBitmap.Create;
 PNG := TPNGObject.Create;
 {In case something goes wrong, free booth Bitmap and PNG}
 try
   Bitmap.LoadFromFile(Source);
   PNG.Assign(Bitmap);    //Convert data into png
   PNG.SaveToFile(Dest);
 finally
   Bitmap.Free;
   PNG.Free;
 end
end;


CODE

Converting from PNG file to Windows bitmap file
The above inverse. Loads a png and saves into a bitmap

procedure PNGFileToBitmap(const Source, Dest: String);
var
 Bitmap: TBitmap;
 PNG: TPNGObject;
begin
 PNG := TPNGObject.Create;
 Bitmap := TBitmap.Create;
 {In case something goes wrong, free booth PNG and Bitmap}
 try
   PNG.LoadFromFile(Source);
   Bitmap.Assign(PNG);    //Convert data into bitmap
   Bitmap.SaveToFile(Dest);
 finally
   PNG.Free;
   Bitmap.Free;
 end
end;


это на дельфи, ну в С++Билдере понятно примерно так:

CODE

#include "pngimage.hpp"

   if( OpenPictureDialog1->Execute() ){
     Graphics::TBitmap*  bmpImage = new Graphics::TBitmap();
     AnsiString ImagePngFile = OpenPictureDialog1->FileName;
     TPNGObject* pngImage = new TPNGObject;
     pngImage->LoadFromFile(ImagePngFile);
     bmpImage->Assign(pngImage);
     delete pngImage;
     AnsiString ImageBmpFile = ChangeFileExt( ImagePngFile, ".bmp" );
     bmpImage->SaveToFile(ImageBmpFile);
     delete bmpImage;
    }


и так далее, в help-e там все это есть.


User Attached Image Скачать файл
pngimage15.zip


Sl@Sh
Отправлено: 07.07.2005, 04:24


Мастер участка

Группа: Участник
Сообщений: 383



to Admin Я немного выше уже выложил эту библиотеку smile.gif

Вернуться в Вопросы программирования в C++Builder