Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> GIF, JPG, BMP, работа с графикой 
:(
    Опции темы
0x00
  Дата 29.1.2007, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 3.4.2006

Репутация: нет
Всего: нет



Никогда не работал с файлами определенного формата. Итак есть 1 вопрос.
Расскажу на примере. Допустим есть у нас файл c:\file.gif размером 100 на 100 в файле нарисована горизонтальная линия. Как мне программно нарисовать еще одну вертикально? Не обязательно GIF, можно на примере JPG или BMP рассказать.
PM MAIL   Вверх
Anikmar
Дата 29.1.2007, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Где нарисовать? На канве? Или видоизменить файл, чтобы там появилась линия?
PM MAIL ICQ   Вверх
0x00
Дата 29.1.2007, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 3.4.2006

Репутация: нет
Всего: нет



видоизменить файл, чтобы там появилась линия
PM MAIL   Вверх
Anikmar
Дата 29.1.2007, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



На мой взгляд достаточно трудоемкая задача, если разбирать каждый формат файла. 
Простое решение  - нарисовать на канве изображение из файла, потом дорисовать туда что душе угодно и сохранить в файл. Можно и канву не использовать - рисовать прямо в памяти.
Главное, не разбирать самостоятельно каждый формат - дело долгое и на мой взгляд бессмысленное - все это уже сделано за нас.
PM MAIL ICQ   Вверх
0x00
Дата 29.1.2007, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 3.4.2006

Репутация: нет
Всего: нет



2Anikmar: можешь привести пример как это сделать с каким-нибудь из этих форматов файлов в памяти?
PM MAIL   Вверх
Anikmar
Дата 29.1.2007, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата(0x00 @  29.1.2007,  23:51 Найти цитируемый пост)
2Anikmar: можешь привести пример как это сделать с каким-нибудь из этих форматов файлов в памяти? 

К сожалению примера под рукой нет. Я никогда этим не занимался - выводил только на форму. Но по этому вопросу очень много есть и в литературе и на форуме - если воспользоваться поиском, то примеров будет много.
Вывод в память используется для анимации движущихся картинок - пока одна на экране, готовится следующий кадр и заливается на экран целиком. Думаю искать надо в разделе графика/мультимедиа или в WinApi

PM MAIL ICQ   Вверх
0x00
Дата 30.1.2007, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 3.4.2006

Репутация: нет
Всего: нет



я весь форум перерыл, такого нет... есть про вывод на экран, а вот про редактирование нет.
PM MAIL   Вверх
Romikgy
Дата 30.1.2007, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 8
Всего: 146



Имхо проще открыть дорисовать и сохранить заново
http://forum.vingrad.ru/index.php?showtopi...t&p=1014729
ссылки на работу с разными форматами


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Anikmar
Дата 30.1.2007, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата(0x00 @  30.1.2007,  00:02 Найти цитируемый пост)
 а вот про редактирование нет. 

1 вопрос. Вас интересует редактирование или нанесение поверх своего изображения? 
2 вопрос: на чем программируете? Я могу посмотреть примеры на Билдере. Студии или чего другого у меня нет.

PM MAIL ICQ   Вверх
0x00
Дата 30.1.2007, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 3.4.2006

Репутация: нет
Всего: нет



вот есть пример кода который в массив заносит цвета... допустим как изменить массив - это не проблема... вот как записать этот массив  (в данном случае image) обратно?
Код

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

void* load_bmp( char *s, int *w, int *h, short *bpp, int *len )
{
char* image;
FILE *f = fopen( s, "rb" );
if (!f) return 0;
fseek(f, 18, SEEK_SET );fread(w, 4, 1, f);
fseek(f, 22, SEEK_SET );fread(h, 4, 1, f);
fseek(f, 28, SEEK_SET );fread(bpp, 2, 1, f);
printf( "w:%d,  h:%d, bpp:%d\n", *w, *h, *bpp );
image = (char*)malloc( *len = (*bpp = ( *bpp == 15 ? 2 : *bpp/8 )) * (*w) * (*h) );
fseek(f, 51, SEEK_SET );
fread( image, 1, *len, f);
printf("*len == %d, *bpp == %d\n", *len, *bpp);
fclose(f);
return image;
}

void blit_bmp( int bellow_x, int bellow_y, char *image, int w, int h, int bpp )
{
int x = bellow_x;
int y = bellow_y;
int i;
int j;

for (i = 0; i < h; ++i, y -= i )
for (j = 0; j < w; ++j, x += j) 
;//put_pixel( x, y, image+((w*i)+j)*bpp, bpp );
}

main() 
{
int w, h, len; 
short bpp;
char *image = (char*)load_bmp("c:\\test.bmp", &w, &h, &bpp, &len);

if ( ! image)
return -1;

blit_bmp( 0, 599, image, w, h, bpp );
}



PM MAIL   Вверх
Anikmar
Дата 30.1.2007, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Ну, можно и по пикселям рисовать, конечно...
Не вижу большого смысла декодировать файл bmp вручную. А потом придется декодировать jpeg, потом tiff и т.д.

В Билдере для этого существует классы TCanvas, TPicture, TJpegImage и т.д.

PM MAIL ICQ   Вверх
0x00
Дата 30.1.2007, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 3.4.2006

Репутация: нет
Всего: нет



вот как мне например можно изменить пикселы от 1000 до 4000 например на черные и записать их обратно в файл?
PM MAIL   Вверх
Alexeis
Дата 30.1.2007, 01:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



Рисовать можно либо на пиксельной карте (битмапе) либо на векторной плоскости, после чего изображение можно конвертировать в любой формат, хотя бы при помощи того же встроенного GDI+ или любой другой библиотеки. Файл растровой графики почти всегда превращается в битовую карту. (исключения, узкий набор преобразований над сжатыми картинками). Файл векторной графики отображается на векторную канву. В памяти ли она или на экране это без разницы, метод доступа одинаков. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
jonie
Дата 30.1.2007, 02:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



предлагаю использовать библиотеки. например GFL SDK
----
http://www.xnview.org
http://www.xnview.com
http://www.xnview.net
----

LTI-Lib найти можно на http://ltilib.sourceforge.net/doc/html/index.shtml
----
или взять сорцы чего-нибудь... например ImageMagic....gimp и прочих... потому как самому маятся с сжатыми форматам уж очень геморно...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
nworm
Дата 30.1.2007, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 502
Регистрация: 22.10.2005

Репутация: 1
Всего: 8



0x00,

Например, структура bmp-файла

Если хочешь менять свой код, то сохрани в функции load_bmp в какую-нибудь переменную всё, что идёт в файле до изображения.

Ну а в итоговый файл запишешь то, что идёт до изображения  и изображение.
Но с другими форматами придётся ещё мучиться.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0557 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.