Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Отображение графического файла C  (Прочитано 25584 раз)
0 Пользователей и 1 Гость смотрят эту тему.
IRONavt
Гость
« : 07-01-2010 19:58 » 

Здравствуйте! Есть небольшой вопрос по сабжу.

Нужно написать простенькую программку на C, способную вывести небольшой графический файл на экран. Дело в том, что до этого я работал в Delphi, а C ковырял совсем немного и только в консоли. Помогите, пожалуйста, я не знаю с какой стороны подступиться, если есть какие-нибудь ссылки по теме - буду рад.

Одним из условий является то, что программа должна быть написана именно на чистом C, всё варианты, что я находил, были для C++
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 07-01-2010 20:02 » 

а почему именно чистый С ?

А вообще, SDK, Image
Записан

IRONavt
Гость
« Ответ #2 : 07-01-2010 20:11 » 

Потому что это будет часть довольно древней программы

А что подразумевается под Image?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 07-01-2010 20:12 » 

это класс такой
Записан

IRONavt
Гость
« Ответ #4 : 07-01-2010 20:15 » 

А без классов никак нельзя? Это C++ уже получается со всеми его ООП
Записан
IRONavt
Гость
« Ответ #5 : 07-01-2010 20:18 » 

На одном забугорном форуме посоветовали разобраться с устройством файла, используя инфу с *** Мол, раз уж (скажем *bmp) файл - это набор информации, его можно расшифровать и воспользоваться.

Насколько это имеет смысл?
« Последнее редактирование: 07-01-2010 20:20 от Алексей1153++ » Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 07-01-2010 20:19 » 

IRONavt, посмотри в хелпе класс TImage и его свойство Canvas (класс TCanvas).
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #7 : 07-01-2010 20:21 » 

IRONavt, с одним форматом разобраться то можно (кстати, bmp лекго рисуется на контексте), а Image поддерживает все форматы
Записан

IRONavt
Гость
« Ответ #8 : 07-01-2010 20:34 » 

RXL, я посмотрел TImage, но TCanvas у него в Делфи, а нужен C Жаль

Алексей1153++, мне хотя бы bmp, в каком направлении мне двигаться? Из консоли реально отрисовать?
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 07-01-2010 20:39 » 

IRONavt, ты в каком разделе пишешь? Borland C++! Есть такой продукт - Borland C++ Builder или сокращенно - BCB. Таже среда, что и Delphi, но язык C++.

В какой среде и какой версии ты пишешь?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
IRONavt
Гость
« Ответ #10 : 07-01-2010 20:41 » 

В Borland C++ Builder 6.... Я честно прочитал правила, просто недогоняю пока. Я до этого только в Delphi писал, а в C только в консоли, поэтому тяжело пока
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 07-01-2010 20:43 » 

IRONavt, замечательно. Я тоже пишу в BCB6. Есть там Cancas. Примерно так:

Image1->Canvas->....

Зачем тебе консоль, если ты хочешь отображать графики? Создавай проект "обычного" приложения.
И еще: не путай C++ и C.
« Последнее редактирование: 07-01-2010 20:45 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
IRONavt
Гость
« Ответ #12 : 07-01-2010 20:48 » 

RXL, пардон, нашел  Скромно так...
Попробую сделать с обычным приложением
Записан
IRONavt
Гость
« Ответ #13 : 08-01-2010 11:06 » 

блин, это всё работа с объектами Жаль
мне нужно на чистом C, не прибегая к ООП. Неужели это нереально?
Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #14 : 08-01-2010 11:23 » 

Реально. Если использовать WinAPI напрямую.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #15 : 08-01-2010 14:50 » 

недавно вот упражнялись )
https://forum.shelek.ru/index.php/topic,22677.0.html
Записан

RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #16 : 08-01-2010 22:41 » 

IRONavt,

1. Чем, собственно, вызвано такое ограничение - писать на Си, а не на C++?
2. Выбор инструмента (BCB6) чем обоснован?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
IRONavt
Гость
« Ответ #17 : 09-01-2010 00:51 » 

Это будет элемент другой, довольно сложной системы (что-то вроде клиента для обращения к базе данных), которая вся написана на Си. Этот клиент сделан под несколько платформ, в т.ч. мобильные, но мне на данном этапе нужно написать просто под винду.
Борланд выбрал только потому что до этого в основном общался с Delphi и писал в Borland Delphi 7 (консольно и визуально), стало быть интерфейс привычен.
Я ставил Qt, но пока в нём не шибко разобрался. Да и использует он С++
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #18 : 09-01-2010 10:16 » 

IRONavt, т.е. тебе нужно связать некую программу на Си с новой, которую ты напишешь? В каком виде идет связь (оба модуля линкуются вместе, как библиотека отдельным файлом, как две раздельные программы, или еще как)?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
IRONavt
Гость
« Ответ #19 : 09-01-2010 22:02 » 

Скорее всего будет линковка, это не уточнялось, если честно Жаль

А что, есть способ связать программу на Си с файлом на С++?
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #20 : 09-01-2010 22:35 » 

Я так понимаю, что на Си написана какая-то библиотека и в BCB6 будет написан интерфейс работы с ней.

test.h:
Код: (C)
#indef TEST_H
#define TEST_H

int my_func(int arg)

#endif /* TEST_H */

test.c:
Код: (C)
#include "test.h"

int my_func(int arg)
{
  /* .... */
  return arg;
}

mail.cpp
Код: (C++)
extern "C"
{
#include "test.h"
}

// .....
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
IRONavt
Гость
« Ответ #21 : 09-01-2010 22:43 » 

extern "C"? В первый раз вижу такое, что оно означает?
Скорее моя программа будет являться подпрограммой их программы. То есть они через свой клиент загружают картинку, а я должен её отобразить.
Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #22 : 10-01-2010 00:05 » 

Это способ дать компилятору C++ понять, что перед ним (внутри фигурных скобок) объявления для кода, написанного на языке C. Для того, чтобы при вызове этих функций компилятор сгенерировал корректный код вызова функций в соответствии с соглашениями для языка C.

Я правильно понимаю, что твоя часть программы - что-то вроде плагина, от которого требуют определённый интерфейс?
Если твоя часть программы будет выполнена в виде библиотеки, то, в принципе, несложно сделать интерфейс на C и реализовать логику на чём-то ещё.
Записан
IRONavt
Гость
« Ответ #23 : 10-01-2010 00:09 » new

Вад, да, типа того. Но "что-то еще" это тогда может быть и Delphi? Вообще, если так смешивать, значит нужно какие-то дополнительные файлы подключать?

Простите мое нупство, я до этого в Си дальше консоли не ходил =_=
Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #24 : 10-01-2010 01:04 » 

Полагаю, может быть и Delphi. Врать не буду - сам так не делал, но, всяком случае, причин для ограничений не вижу. Это нужно документацию смотреть. Но по идее, дополнительной работы для того, чтобы вызвать написанную на Delphi функцию из кода на C, должно быть немного.
Записан
IRONavt
Гость
« Ответ #25 : 10-01-2010 10:32 » 

что-то гугль молчит как рыба-партизан
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines