Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сохранить график TChart в JPEG? 
:(
    Опции темы
Melevir
Дата 7.7.2009, 06:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Есть стандартный метод сохранения в bmp,  а надо в jpeg. Посоветуйте что нибудь пожалуйста.. 
PM MAIL   Вверх
Alexeis
Дата 7.7.2009, 09:49 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



  1) Конвертировать файл после сохранения.
  2) Захватываем картинку сами, TCanvas(GetDC(TChart->Handle)). С этого канаваса копируем на TBitmap c него в TJpegImage -> SaveToFile
  3) Покупаем pro версию этого самого TeeChart, где уже есть сохранение в разные форматы.


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

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

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


Новичок



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

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



Пишу
Код

  Graphics::TBitmap* a = new Graphics::TBitmap;
  a = TCanvas(GetDC(Chart1->Handle));

Выдается ошибка
Код

[C++ Error] Unit1.cpp(24): E2285 Could not find a match for 'TCanvas::TCanvas(void *)'

Что это такое, не понимаю...
PM MAIL   Вверх
Alexeis
Дата 7.7.2009, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Ой прости, так действительно нельзя
Правильно будет так.
Код


#include <Jpeg.hpp>
.....
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TCanvas *Source = new TCanvas();
    Source->Handle = GetDC(Chart1->Handle);
    Graphics::TBitmap *bmp = new Graphics::TBitmap();
    bmp->SetSize(Chart1->ClientWidth, Chart1->ClientHeight);

    RECT src = Chart1->ClientRect;
    RECT dst = {0, 0, Chart1->ClientWidth, Chart1->ClientHeight};
    bmp->Canvas->CopyRect(dst, Source, src);
    TJPEGImage *jpeg = new TJPEGImage();
    jpeg->Assign(bmp);

    jpeg->SaveToFile("c:\\1.jpg");
    jpeg->Free();

    bmp->Free();

    ReleaseDC(Chart1->Handle, Source->Handle);
    Source->Free();
}



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

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

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


Новичок



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

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



Скопировал один-в-один, получил кучу ошибок :(
Вот весь код:
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include <Jpeg.hpp>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TCanvas *Source = new TCanvas();
    Source->Handle = GetDC(Chart1->Handle);
    Graphics::TBitmap *bmp = new Graphics::TBitmap();
    bmp->SetSize(Chart1->ClientWidth, Chart1->ClientHeight);
    RECT src = Chart1->ClientRect;
    RECT dst = {0, 0, Chart1->ClientWidth, Chart1->ClientHeight};
    bmp->Canvas->CopyRect(dst, Source, src);
    TJPEGImage *jpeg = new TJPEGImage();
    jpeg->Assign(bmp);
    jpeg->SaveToFile("c:\\1.jpg");
    jpeg->Free();
    bmp->Free();
    ReleaseDC(Chart1->Handle, Source->Handle);
    Source->Free();
}
//---------------------------------------------------------------------------

Вот ошибки:
Код

  [C++ Error] Unit1.cpp(24): E2316 'SetSize' is not a member of 'TBitmap'
  [C++ Error] Unit1.cpp(26): E2141 Declaration syntax error
  [C++ Error] Unit1.cpp(26): E2139 Declaration missing ;
  [C++ Warning] Unit1.cpp(26): W8004 'dst' is assigned a value that is never used
  [C++ Warning] Unit1.cpp(26): W8004 'src' is assigned a value that is never used
  [C++ Warning] Unit1.cpp(26): W8004 'bmp' is assigned a value that is never used
  [C++ Error] Unit1.cpp(26): E2190 Unexpected }
  [C++ Error] Unit1.cpp(27): E2141 Declaration syntax error
  [C++ Error] Unit1.cpp(29): E2238 Multiple declaration for 'jpeg'
  [C++ Error] Unit1.cpp(28): E2344 Earlier declaration of 'jpeg'
  [C++ Error] Unit1.cpp(29): E2141 Declaration syntax error
  [C++ Error] Unit1.cpp(30): E2238 Multiple declaration for 'jpeg'
  [C++ Error] Unit1.cpp(29): E2344 Earlier declaration of 'jpeg'
  [C++ Error] Unit1.cpp(30): E2141 Declaration syntax error
  [C++ Error] Unit1.cpp(31): E2238 Multiple declaration for 'jpeg'
  [C++ Error] Unit1.cpp(30): E2344 Earlier declaration of 'jpeg'
  [C++ Error] Unit1.cpp(31): E2141 Declaration syntax error
  [C++ Error] Unit1.cpp(32): E2238 Multiple declaration for 'bmp'
  [C++ Error] Unit1.cpp(27): E2344 Earlier declaration of 'bmp'
  [C++ Error] Unit1.cpp(32): E2141 Declaration syntax error
  [C++ Error] Unit1.cpp(33): E2303 Type name expected
  [C++ Error] Unit1.cpp(33): E2356 Type mismatch in redeclaration of '__stdcall ReleaseDC(void *,void *)'
  [C++ Error] winuser.h(6412): E2344 Earlier declaration of '__stdcall ReleaseDC(void *,void *)'
  [C++ Error] Unit1.cpp(33): E2063 Illegal initialization
  [C++ Error] Unit1.cpp(33): E2293 ) expected
  [C++ Error] Unit1.cpp(34): E2141 Declaration syntax error
  [C++ Error] Unit1.cpp(35): E2190 Unexpected }

Пробовал вместо Graphics::TBitmap использовать Windows::TBitmap, без толку...

Это сообщение отредактировал(а) Melevir - 7.7.2009, 21:09
PM MAIL   Вверх
mrbrooks
Дата 8.7.2009, 08:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

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



Melevir, как бэ следи за логикой то Alexeis - попробуй так:
Код

#include <Jpeg.hpp>
#include <memory>

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    std::auto_ptr<TCanvas>Source(new TCanvas);
    Source->Handle = GetDC(Chart1->Handle);
    std::auto_ptr<Graphics::TBitmap>bmp(new Graphics::TBitmap);
    bmp->Width = Chart1->ClientWidth;
    bmp->Height = Chart1->ClientHeight;
    RECT src = Chart1->ClientRect;
    RECT dst = {0, 0, Chart1->ClientWidth, Chart1->ClientHeight};
    bmp->Canvas->CopyRect(dst, Source.get(), src);
    std::auto_ptr<TJPEGImages>jpeg(new TJPEGImage);
    jpeg->Assign(bmp.get());
    jpeg->SaveToFile("c:\\1.jpg");
    ReleaseDC(Chart1->Handle, Source->Handle);
}

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


Амеба
Group Icon


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

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



Melevir, код проверенный. Сохранял, смотрел картинку, все верно. C++ Builder 2007.


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

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

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


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

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



Alexeis, есть подозрение, что автор юзает С++ Builder 6.
PM MAIL   Вверх
Alexeis
Дата 10.7.2009, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



  Если не работает
Код

bmp->SetSize(Chart1->ClientWidth, Chart1->ClientHeight);


Можно заменить на 

Код

bmp->Height = Chart1->ClientHeight;
bmp->Width  = Chart1->ClientWidth;



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

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

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


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

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



Цитата(Alexeis @  10.7.2009,  09:29 Найти цитируемый пост)
Можно заменить на 

камрад я собственно это и написал  в своем посте smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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