![]() |
bitmap エンバカデロのサンプル プログラムのStrokeのデモがコンパイル出来るのですが、Strokeが動作しないので、Strokeが動作を確認したく作ったプログラムです。 なにか、画像をロードしてから、各ボタンをクリックすれば、処理前の画像に各ボタン処理をして処理後に表示します。 Joinの効果を見るには、Thicknessに40とか大きな数値をセットすれば、角の丸みがはっきりでます。Dashは何種類かの点線が選べるようです。 |
![]() |
サンプル プログラムでは Image->Bitmap->Canvas->Stroke->Dash=とImageに書き込んでおりましたが、これでは駄目のようで、
TBitma bitmap =new TBitmap(0,0)、このbitmap->Canvas->Stroke->Dash=とし、処理後、Image->Bitmap=bitmapとすると
Imageに結果が書き込まれるようでしいた、なんで直接では駄目なのか不明です。
サンプル プログラムではStrokeDashとしておりますが、これではコンパイル エラ−となりStroke->Dashとしないと駄目でした。Version
による違いなのでしょうか ? switch(){ case 1: { } も波括弧で閉じるなど細かな点で大分変更があるようで戸惑います。 また、プロジェクト オプションで実行時パッケ−ジのチェックを外すと、コンパイル エラ−が出ることがありました。 |
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.fmx"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner)
{}
//---------------------------------------------------------------------------
void Disp(int i)
{
int x0,x1,x2,x3,x4,x5,x6,y0,y1,y2,y3,y4,y5,y6;
TBitmap *MyBitmap = new TBitmap(0, 0);
try {
if (Form1->Image1->Bitmap->IsEmpty()) { ; }
else {
// A copy of the initial bitmap
MyBitmap->Assign(Form1->Image1->Bitmap);
// Draw a rectangle on the copy
MyBitmap->Canvas->BeginScene();
MyBitmap->Canvas->Stroke->Kind = TBrushKind::Solid;
MyBitmap->Canvas->Stroke->Color = Form1->ColorComboBox1->Color;
MyBitmap->Canvas->Stroke->Thickness =StrToFloat(Form1-> NumberBox1->Text);
MyBitmap->Canvas->Stroke->Dash = TStrokeDash(Form1->ComboBox1->ItemIndex);
MyBitmap->Canvas->Stroke->Join =TStrokeJoin(Form1->ComboBox3->ItemIndex);
MyBitmap->Canvas->Stroke->Cap = TStrokeCap(Form1->ComboBox2->ItemIndex);
/* 下記では、プロジュエクトのオプションで、実行時パッケ−ジのチェックを外すとコンパイル時「 Stroke.Dash の読み取りエラ−」が出る
ので、MyBitmap->Canvas->Stroke->Dash = TStrokeDash(Form1->ComboBox1->ItemIndex);とした
MyBitmap->Canvas->Stroke->Dash = TStrokeDash(GetEnumValue(__delphirtti(TStrokeDash),Form1->ComboBox1->Selected->Text));
MyBitmap->Canvas->Stroke->Join = TStrokeJoin(GetEnumValue(__delphirtti(TStrokeJoin),Form1->ComboBox3->Selected->Text));
MyBitmap->Canvas->Stroke->Cap = TStrokeCap(GetEnumValue(__delphirtti(TStrokeCap),Form1->ComboBox2->Selected->Text));
*/
switch(i)
{ case 1:{
x0=Form1->Image1->Bitmap->Width/8;
y0=Form1->Image1->Bitmap->Height/8;
x1=Form1->Image1->Bitmap->Width/8*4;
y1=Form1->Image1->Bitmap->Height/8*4;
TRectF MyRect = TRectF(x0, y0, x1, y1);
MyBitmap->Canvas->DrawRect(MyRect, 20, 20, AllCorners, 1.0);
break;
}
case 2:
{ x0=Form1->Image1->Bitmap->Width/8;
y0=Form1->Image1->Bitmap->Height/8;
x1=Form1->Image1->Bitmap->Width/8*4;
y1=Form1->Image1->Bitmap->Height/8*4;
TPointF p0(x0,y0),p1(x1,y1);
MyBitmap->Canvas->DrawLine(p0,p1,100);
break;
}
case 3:
{
x0=Form1->Image1->Bitmap->Width/8;
y0=Form1->Image1->Bitmap->Height/8;
x1=Form1->Image1->Bitmap->Width/8*4;
y1=Form1->Image1->Bitmap->Height/8*4;
TPointF p0(x0,y0),p1(x1,y1);
MyBitmap->Canvas->DrawArc(p1,p0,90,230,20);
break;
}
case 4:
{
x0=Form1->Image1->Bitmap->Width/8;
y0=Form1->Image1->Bitmap->Height/8;
x1=Form1->Image1->Bitmap->Width/8*4;
y1=Form1->Image1->Bitmap->Height/8*4;
TRectF MyRect = TRectF(x0, y0, x1, y1);
MyBitmap->Canvas->DrawEllipse(MyRect, 40);
break; }
case 5:
{
x0=Form1->Image1->Bitmap->Width/2;
y0=Form1->Image1->Bitmap->Height/8;
x1=Form1->Image1->Bitmap->Width/8*2;
y1=Form1->Image1->Bitmap->Height/8*2;
x2=Form1->Image1->Bitmap->Width/8*3;
y2=Form1->Image1->Bitmap->Height/8*6;
x3=Form1->Image1->Bitmap->Width/8*5;
y3=Form1->Image1->Bitmap->Height/8*6;
x4=Form1->Image1->Bitmap->Width/8*6;
y4=Form1->Image1->Bitmap->Height/8*2;
x5=Form1->Image1->Bitmap->Width/8*4;
y5=Form1->Image1->Bitmap->Height/8*4;
TPointF p0(x0,y0),p1(x1,y1),p2(x2,y2),p3(x3,y3),p4(x4,y4),p5(x0,y0),p6(x6,y6);
TPolygon MyPolygon;
MyPolygon.set_length(6);
MyPolygon[0]=p0;
MyPolygon[1]=p1;
MyPolygon[2]=p2;
MyPolygon[3]=p3;
MyPolygon[4]=p4;
MyPolygon[5]=p5;
MyBitmap->Canvas->DrawPolygon(MyPolygon,50);
break;
}
case 6: //Join
{
x0=Form1->Image1->Bitmap->Width/2;
y0=Form1->Image1->Bitmap->Height/8;
x1=Form1->Image1->Bitmap->Width/8*4;
y1=Form1->Image1->Bitmap->Height/8*1;
x2=Form1->Image1->Bitmap->Width/8*2;
y2=Form1->Image1->Bitmap->Height/8*7;
x3=Form1->Image1->Bitmap->Width/8*7;
y3=Form1->Image1->Bitmap->Height/8*3;
x4=Form1->Image1->Bitmap->Width/8*2;
y4=Form1->Image1->Bitmap->Height/8*3;
TPointF p0(x0,y0),p1(x1,y1),p2(x2,y2),p3(x3,y3),p4(x4,y4),p5(x0,y0),p6(x6,y6);
TPolygon MyPolygon;
MyPolygon.set_length(6);
MyPolygon[0]=p0;
MyPolygon[1]=p1;
MyPolygon[2]=p2;
MyPolygon[3]=p3;
MyPolygon[4]=p4;
MyPolygon[5]=p5;
MyBitmap->Canvas->DrawPolygon(MyPolygon,50);
break;
}
}
}
MyBitmap->Canvas->EndScene();
// Display the result
Form1->Image2->Bitmap = MyBitmap;
}
__finally {
delete MyBitmap;
}
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
if (OpenDialog1->Execute()) {
Image1->Bitmap->LoadFromFile(OpenDialog1->FileName);
Button1->Enabled=true;
Button3->Enabled=true;
Button4->Enabled=true;
Button5->Enabled=true;
Button6->Enabled=true;
Button7->Enabled=true;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{ Disp(1); }
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{ Disp(2); }
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{ Disp(3); }
//---------------------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{ Disp(4); }
//---------------------------------------------------------------------------
void __fastcall TForm1::Button6Click(TObject *Sender)
{ Disp(5); }
//---------------------------------------------------------------------------
void __fastcall TForm1::Button7Click(TObject *Sender)
{ Disp(6); }
//---------------------------------------------------------------------------
void __fastcall TForm1::Button8Click(TObject *Sender)
{ Close(); }
//---------------------------------------------------------------------------