Графические файлы и C++Builder 2006
Всем привет. Меня интересует такой вопрос: как изменить высоту и ширину изображения графического файла ((BMP & Jpeg)). Спасибо.
Попробуй компонент TImage32 - один из немногих, который хорошо интерполирует.
ЗЫ Скока миньа ниучи - всьо-равно ламер.
Найдешь абсолютного знатока - свистни ;-)
И еще, un_named, можно по-подробнее, что такое BitBlt и StretchBlt и с чем их едят? Просто с графикой работаю не так давно, в основном БД... Спасибо.
Их кушают с любым справочником ВинАпи, они применяются при отображении, а если нужно работать только с преобразованием файла рисунка без показа этого преобразования (, в каких-нибудь базах данных), то они скорее всего тебе не понадобятся.
Попробовал TImage32, да, компонент отличный, но он работает только с изображением, а мне нужно средство для работы непосредственно с файлами - изменять количество точек файла, а не отображаемого изображения. Ребят, помогите, очень нужно. Пришлите либо алгоритм, либо имя компонента. Нужно обработать BMP и JPG. Спасибо за внимание.
обработать файл значит его скачать... потом сохранить... Ну открыл картинку,преобразовал. сохранил.... полюбе для преобразования нужно скачивать файл. Хотя... Можешь работать напрямую с файлом и редактировать его побитно... но думаю это будет очень геморойно
если тебе надо изменить размер "канвы" (а не самой картинки), то ТУПО создаешь новый битмап, такого размера которого тебе надо, а потом копируешь на него (куда тебе надо) старый битмап.
Про установку: качаешь архив с конпонентом, идешь в папку Packages и открываешь в своей IDE файл GR32_<версия_IDE>.dpk, дальше компилируешь и устанавливаешь.
Цитата:
Copies part of an image from another canvas into the canvas.
void __fastcall CopyRect(const TRect &Dest, TCanvas* Canvas, const TRect &Source);
я думаю сделать 2 штука TRect не составит труда :) но это конечно если надо увеличить размер канвы, а не самой картинки (как я уже говорил выше.)
PS: а теперь давайте дождемся ответа автора :D
PPS: да, для Пеликанов ) работать с канвой можно и не прорисовывая её, ну это так... промеждупрочим. ) ну а дальше TBitmap::SaveToFile() :)
С TImage32 разобрался, с файлами работает, но не корректно. Если вызвать метод Bitmap->SetSize(int,int), то масштабирование происходит, но картинка становится черной.
Подскажите, что еще нужно, чтобы картинка не была черной.
Спасибо.
ПС: С TRect не очень понятно, я пытался, но программа вылетала. Если можно, пришлите, пример работы с TRect ((основные функции, например, изменение размеров...)).
Код:
TRect(0,0,10,10) // квадрат 10х10 начинающийся в 0,0. Можно юзать прям так, не создаваю новую переменную =)
Цитата: Тень Пса
какая мешанина? каких пикселей? вы о чём? :))
я думаю сделать 2 штука TRect не составит труда :) но это конечно если надо увеличить размер канвы, а не самой картинки (как я уже говорил выше.)
PS: а теперь давайте дождемся ответа автора :D
PPS: да, для Пеликанов ) работать с канвой можно и не прорисовывая её, ну это так... промеждупрочим. ) ну а дальше TBitmap::SaveToFile() :)
я думаю сделать 2 штука TRect не составит труда :) но это конечно если надо увеличить размер канвы, а не самой картинки (как я уже говорил выше.)
PS: а теперь давайте дождемся ответа автора :D
PPS: да, для Пеликанов ) работать с канвой можно и не прорисовывая её, ну это так... промеждупрочим. ) ну а дальше TBitmap::SaveToFile() :)
CopyRect премещает прямоугольную часть картинки на канву другой картинки, но не масштабирует изображение. А мне нужно из файла Original.jpg (Слева) получить файл Scaled.jpg (Справа). Жду ответов с нетерпением.
Цитата:
Draws the graphic specified by the Graphic parameter in the rectangle specified by the Rect parameter.
void __fastcall StretchDraw(const TRect &Rect, TGraphic* Graphic);
Да, эту функцию надо использовать. Отсюда вывод: Тень Пса->Reputation++
Но тема не закрыта! У меня, возможно, скоро еще вопрос созреет...
А как определить, зная лишь абсолютный путь к файлу, JPEG он или нет, не по расширению, а именно по формату?
первые три(больше?) байта похожи на сведения о формате :)
Цитата:
первые три байта
?
Функцией read что ли?
м-да... Наверное, этот вопрос придется обработать через исключения.
Цитата: Pelican
м-да... Наверное, этот вопрос придется обработать через исключения.
Да не обязательно. Если необходимо просто считать заголовок - то вовсе не обязательно его распаковывать. Посмотри формат - и сделай так как в приведенной теме.
На форме находятся: 1 кнопка, 1 лейбл, 1 диалог открытия файла.
Мне кажется, что последний байт читается некорректно, когда проверил эту прогу на архиве rar, она вывела Rar.. (вместо 2-х точек подразумевается абракадабра), а всем известно, что сигнатура - Rar!
Хотя скорей всего это из-за того, что бинарные данные конвертируются в AnsiString...
Код:
//$$---- Form CPP ----
//---------------------------------------------------------------------------
#include <vcl.h>
#include <fstream.h>
#pragma hdrstop
#define BUFFER 3
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char buffer[BUFFER];
if (OpenDialog1->Execute()) {
ifstream in(OpenDialog1->FileName.c_str(), ios::out ios::binary);
if (in) {
in.read(buffer, BUFFER);
in.close();
Label1->Caption=AnsiString(buffer);
}
}
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#include <vcl.h>
#include <fstream.h>
#pragma hdrstop
#define BUFFER 3
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char buffer[BUFFER];
if (OpenDialog1->Execute()) {
ifstream in(OpenDialog1->FileName.c_str(), ios::out ios::binary);
if (in) {
in.read(buffer, BUFFER);
in.close();
Label1->Caption=AnsiString(buffer);
}
}
}
//---------------------------------------------------------------------------
Добавлено: Пришлите, пожайлуста, оригинальную сигнатуру JPEG